属性的客户端ID(ASP.Net MVC)

我是asp.net mvc的初学者,我有一个疑问:

我正在尝试在我的视图中为TextBox做一个标签,我想知道,我如何获取将在客户端渲染的Id以生成脚本…例如:

<label for=""> Name:  x.Name) %> 

我需要在“ClientId”中放置什么来确保将正确的ID呈现给相应的控件?

谢谢

干杯

将此代码放在某处:

 using System; using System.Linq.Expressions; using System.Web.Mvc; namespace MvcLibrary.Extensions { public static class HtmlExtensions { public static MvcHtmlString FieldIdFor(this HtmlHelper html, Expression> expression) { string htmlFieldName = ExpressionHelper.GetExpressionText(expression); string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); return MvcHtmlString.Create(inputFieldId); } } } 

然后在ASPX视图中:

  <%= Html.TextBoxFor(m => m.EmailAddress) %> 

您也可以在JavaScript调用中使用它,因为您不会提前知道控件的ID,并且可能需要它才能使某些JavaScript代码对其起作用:

  

LabelFor HTML帮助方法,有人在这里提到,不允许你指定你想要使用的实际文本标签,你必须用属性来装饰你的ViewModels来设置标签文本,恕我直言是丑陋的。 我宁愿那些东西出现在实际的ASPX视图部分本身,而不是某些域/视图模型。 有些人会不同意我的看法。

不确定发布链接到某个博客post的规则,但我发布了一个关于这个确切主题的博客: http : //www.dominicpettifer.co.uk/Blog/37/strongly-typed–label–elements-in -Asp净MVC-2

MVC 4现在已经内置了……看到这个

它的乐趣可以在MVC的免费源代码中找到。 这是答案:

@ Html.IdFor@ Html.NameFor

那么区别是什么呢? 这是一个问题:

NameFor不会替换任何“。” 至 ”_”。

如果你想要任何一个例子, 我找到了这篇很酷的小文章

如前所述,您不必担心ASP.NET MVC中的ClientID,UniqueID等,因为它们是webforms抽象。 您只需写出您想要的ID即可。 还有一种扩展方法:

 <%= Html.LabelFor(x => x.Name) %> 

使用以下内容:

 Model.Name 

您可以简单地执行“查看源代码”或使用类似Firebug的内容检查呈现的文本框,以查看Html.xyzFor()方法生成的内容。 通常,他们会生成一个文本框,其中“id”和“name”属性都设置为属性名称。