【问题标题】:Client Id for Property (ASP.Net MVC)属性的客户端 ID (ASP.Net MVC)
【发布时间】:2011-03-05 03:57:54
【问题描述】:

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

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

我需要在“ClientId”中输入什么来确保正确的Id会被渲染到相应的控件?

【问题讨论】:

    标签: c# asp.net-mvc razor clientid


    【解决方案1】:

    使用以下内容:

    Model.Name
    

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

    【讨论】:

    • 它会写属性的内容,我不需要它..我需要属性的名称(或客户端ID...如果有的话...我不需要'不知道excatly)
    • @FelipeOriani @womp 在使用 Html.LabelFor(x =&gt; x.Id) 时,它向我显示了我定义的 DisplayName 的“Id”文本,而不是来自 DB 的 Id 值。有没有cmets?
    【解决方案2】:

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

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

    【讨论】:

    • LabelFor 会给你一个强类型的
    【解决方案3】:

    将此代码放在某处:

    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.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2

    【讨论】:

    • 我知道,但是有些人不能正确理解(我的英语不是很好)!这就是我所需要的……非常感谢,伙计!用属性装饰域模型类对我来说不是一个好习惯,我同意你的观点!
    • 在下面查看我的答案,不再需要
    【解决方案4】:

    MVC 4 现已内置此功能。请参阅 this

    【讨论】:

      【解决方案5】:

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

      @Html.IdFor@Html.NameFor

      那么有什么区别呢?关键是:

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

      如果你想要任何例子,I have found this cool small article

      【讨论】:

        猜你喜欢
        • 2010-11-10
        • 2011-10-03
        • 2014-11-03
        • 2020-11-15
        • 1970-01-01
        • 2013-11-12
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多