Fel*_*ani 21 c# asp.net-mvc clientid razor
我是asp.net mvc的初学者,我有一个疑问:
我正在尝试在我的视图中为TextBox做一个标签,我想知道,我如何获取将在客户端渲染的Id以生成脚本...例如:
<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>
我需要在"ClientId"中放置什么来确保将正确的ID呈现给相应的控件?
谢谢
干杯
Sun*_*oot 38
将此代码放在某处:
using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 
namespace MvcLibrary.Extensions 
{ 
    public static class HtmlExtensions 
    { 
        public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html,
            Expression<Func<TModel, TValue>> expression) 
        { 
            string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
            string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); 
            return MvcHtmlString.Create(inputFieldId); 
        } 
    } 
}
然后在ASPX视图中:
<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label> 
<%= Html.TextBoxFor(m => m.EmailAddress) %>
您也可以在JavaScript调用中使用它,因为您不会提前知道控件的ID,并且可能需要它来使用某些JavaScript代码来对付它:
<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>
LabelFor HTML帮助方法,有人在这里提到,不允许你指定你想要使用的实际文本标签,你必须用属性来装饰你的ViewModels来设置标签文本,恕我直言是丑陋的.我宁愿那些东西出现在实际的ASPX视图部分本身,而不是某些域/视图模型.有些人会不同意我的看法.
不确定发布链接到某个博客帖子的规则,但我发布了一个关于这个确切主题的博客:http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in -Asp净MVC-2
它的乐趣可以在MVC的免费源代码中找到.这是答案:
@ Html.IdFor或 @ Html.NameFor
那么区别是什么呢?这是一个问题:
NameFor不会替换任何"." 至 "_".
如果你想要任何一个例子,我发现这篇很酷的小文章
| 归档时间: | 
 | 
| 查看次数: | 12994 次 | 
| 最近记录: |