我正在尝试在视图中为文本框添加标签,我想知道如何获取将在客户端中呈现的 ID 来生成脚本...例如:
<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>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<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 帮助器方法不会让您指定要使用的实际文本标签,您必须使用属性来装饰 ViewModel 来设置标签文本,恕我直言,这很丑陋。我宁愿这些东西出现在实际的 ASPX 视图部分本身中,而不是出现在某些域/视图模型上。但有些人会不同意我的观点。
不确定发布博客文章链接的规则,但我发布了关于这个主题的博客:http://www.dominicpetifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2 http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)