22

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

<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>

我需要在“ClientId”中添加什么以确保将正确的 Id 呈现给相应的控件?

4

5 回答 5

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 帮助器方法不会让您指定要使用的实际文本标签,您必须使用属性装饰您的 ViewModel 以设置标签文本,恕我直言很难看。我宁愿这些东西出现在实际的 ASPX 视图部分本身,而不是某些域/视图模型上。不过有些人会不同意我的观点。

不确定发布博客文章链接的规则,但我发布了一个关于这个确切主题的博客:http: //www.domincpettifer.co.uk/Blog/37/strongly-typed--label--elements-in -asp-net-mvc-2

于 2010-06-18T13:06:02.567 回答
27

MVC 4 现在内置了这个.. 看到这个

于 2012-04-23T11:10:03.490 回答
6

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

@Html.IdFor@Html.NameFor

那么区别是什么呢?这是问题所在:

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

如果你想要任何例子,我发现了这篇很酷的小文章

于 2013-02-12T04:04:03.067 回答
0

如前所述,您无需担心 ASP.NET MVC 中的 ClientID、UniqueID 等,因为它们是 Web 表单抽象。你可以简单地写出你想要的ID。还有一个扩展方法:

<%= Html.LabelFor(x => x.Name) %>
于 2010-06-18T10:59:36.433 回答
-2

使用以下内容:

Model.Name

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

于 2010-06-17T20:21:31.333 回答