我@Html.RouteLink("Validate", "ValidateEmail", new { email = Model.Email, key = Model.Key })用来生成一个链接,我通过电子邮件发送给新注册的用户.当我尝试这个时,我发现,wops,它没有生成绝对的URL ...这意味着我有一个类似的链接<a href="/Membership/Validate/email.to%40you.com?key=someKey">Validate</a>.但是,当我在电子邮件中发送此链接时,它(原因)将无法正常工作,那么我该如何改进呢?有什么简单的解决
例如,在MVC应用程序中,我可以使用Html帮助程序创建如下标签:
@Html.LabelFor(m => m.ProductName)
Run Code Online (Sandbox Code Playgroud)
我没有在任何地方声明变量"m",但IDE会自动确定我正在尝试做什么.IDE比我更了解我的代码,这有点令人不安.我想解决这个问题.
我大多想知道它是如何知道如何引用我的模型的.
编辑:谢谢你的所有答案.
所以,"Html"是HtmlHelper的一个实例."Html"是ViewPage基类的成员.它的值在ViewPage基类的InitHelpers()方法中设置.HtmlHelper构造函数将ViewPage的ViewContext作为参数.ViewContext知道我正在使用的模型.LabelFor是HtmlHelper类的扩展方法.这就是lambda表达式知道如何引用我的模型的原因.
点已连接.谢谢!
我看到mvc正在查找从Html.DisplayFor方法中的lambda函数传递给它的变量的名称:
@Html.HiddenFor(model => myModel.propA.propB)
Run Code Online (Sandbox Code Playgroud)
可以生成HTML之类的东西:
<input id="myModel_propA_propB" type="hidden" value="" >
Run Code Online (Sandbox Code Playgroud)
它显然是使用反射,但它超出了我.有人能填补我吗?
另外,是否可以创建一个HTML辅助函数,它使用完全属性引用而不是lambda函数来完成类似的操作?即.
@Html.HiddenFor(myModel.propA.propB)
Run Code Online (Sandbox Code Playgroud)
...并且帮助程序可以传递完整的"myModel.propA.propB"引用而不仅仅是propB的值?是一个lambda函数,一个奇怪的.net解决方法来完成这类任务,或者它实际上是所有编程规则的首选方法.
我正在努力CakePHP并试图了解使我的应用程序保持一致和合乎逻辑的最佳方法.
现在我正在尝试Model data validation处理和处理验证错误view,我怀疑如果我想在返回的错误中插入一些链接,我应该怎么做,例如忘记密码.
HtmlHelper在模型中使用(如果可能的话)在我的应用程序中返回一致的链接是好的,还是我应该考虑另一种方式?
<?php
App::import('Helper', 'Html');
class User extends AppModel {
var $name = 'User';
var $validate = array (
'email' => array (
'checkEmail' => array (
'rule' => array('email', true),
'message' => 'Email not valid message.'
),
'checkUnique' => array (
'rule' => 'isUnique',
'message' => 'This email is allready in the db, if you forgot the password, '.(string)$this->Html->link('click here', array('controller' => 'users', 'action' => 'password-recover')).'.'
)
)
// …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET MVC 3 Razor Web应用程序.
我有一个WebViewPage扩展名:
public static bool Blah(this WebViewPage webViewPage)
{
return blah && blah;
}
Run Code Online (Sandbox Code Playgroud)
我想从我的HtmlHelper扩展程序访问这个:
public static MvcHtmlString BlahHelper(this HtmlHelper htmlHelper, string linkText, string actionName)
{
// how can i get access to the WebViewPage extension method here?
}
Run Code Online (Sandbox Code Playgroud)
WebViewPage如果必须的话,我当然可以复制扩展的功能,但只是想知道是否可以从HTML帮助程序访问它.
我目前在视图中使用以下代码来调整Html.TextAreaFor()的高度以适应其内容.有没有明显更好和/或更简洁的方法来做到这一点?
...
int width = 85;
int lines = 1;
string[] arr = Model.Text.Split(new string[] {"\r\n", "\n", "\r"}, StringSplitOptions.None);
foreach (var str in arr)
{
if (str.Length / width > 0)
{
lines += str.Length / width + (str.Length % width <= width/2 ? 1 : 0);
}
else
{
lines++;
}
}
@Html.TextAreaFor(m => m.Text,
new
{
id = "text",
style = "width:" + width + "em; height:" + lines + "em;"
})
...
Run Code Online (Sandbox Code Playgroud) 我有这个:
[Display(Name = "Empresa")]
public string Company{ get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的aspx中我有:
<th><%: Html.LabelFor(model => model.Company)%></th>
Run Code Online (Sandbox Code Playgroud)
这会产生:
<th><label for="Company">Empresa</label></th>
Run Code Online (Sandbox Code Playgroud)
是否有任何html帮助扩展只显示没有标签的display属性,只显示纯文本?我想要的输出是这样的:
<th>Empresa</th>
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑
我按照建议尝试了DisplayFor或DisplayTextFor,但它们无效,因为它们生成:
<th>Amazon</th>
Run Code Online (Sandbox Code Playgroud)
它们返回属性的值...我想要Display属性中的名称.
我有一个像http://example.com/?sort=pop这样的网址
在我看来,我正在使用 link_to category.name, categories_path(category)
如何保留请求URL上可能已存在的任何查询字符串参数?
因此,最终的链接网址为http://example.com/categories/1?sort=pop
嗯...问题更复杂,然后问题标题说.首先,我有一个HtmlHelper的扩展方法,它根据当前的路由参数生成带参数的html链接.也就是说,如果我在页面上.../page?param1=val1¶m2=val2,当我调用我的方法ActionQuryLink来生成链接时,@Html.ActionQuryLink("link text", "action", new { param3 = "value3" })我会得到一个链接<a href=".../page?param1=val1¶m2=val2¶m3=value3">link text</a>.好吧,扩展类本身是:
public static class ActionLinkHelper
{
public static MvcHtmlString ActionQueryLink(this HtmlHelper htmlHelper, string linkText, string action)
{
return (ActionQueryLink(htmlHelper, linkText, action, null, null));
}
public static MvcHtmlString ActionQueryLink(this HtmlHelper htmlHelper, string linkText, string action, object routeValues)
{
/*line 16*/return (ActionQueryLink(htmlHelper, linkText, action, routeValues, null));
}
public static MvcHtmlString ActionQueryLink(this HtmlHelper htmlHelper, string linkText, string action, object routeValues, IDictionary<string, object> htmlAttributes)
{
var …Run Code Online (Sandbox Code Playgroud) 我需要一个通用的内联帮助器来显示字段.
这是我目前的情况:
@helper DisplayField(Func<MyModel, string> field)
{
if (string.IsNullOrWhiteSpace(field(Model)) == false)
{
<div class="row"> @field(Model) </div>
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
@DisplayField(m => m.Name)
@DisplayField(m => m.PhoneNumber)
Run Code Online (Sandbox Code Playgroud)
我不知道如何在帮助器中显示Label(DisplayAttribute).请帮忙.
html-helper ×10
asp.net-mvc ×7
c# ×4
razor ×3
cakephp ×1
html ×1
lambda ×1
model ×1
moq ×1
reflection ×1
routes ×1
unit-testing ×1
viewpage ×1