【问题标题】:Can ASP.NET MVC generate elements with lower case name and id attributesASP.NET MVC 能否生成具有小写名称和 id 属性的元素
【发布时间】:2011-07-19 15:29:41
【问题描述】:

我讨厌 ASP.NET html 帮助程序在与 POCO 属性相同的情况下生成 name 和 id 属性。

大多数开发人员通常使用小写的 name 和 id 值,但我似乎找不到在 ASP.NET MVC 中完成此操作的方法。

查看源代码表明无法覆盖此功能,但我可能错了。

这有可能吗?

编辑: 我会更具体一些,并举例说明我所说的内容,因为似乎有些混乱。

我的模型如下所示:

public class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

在我看来,我像这样使用 Html herlpers:

@Html.InputFor(m => m.FirstName)

这会生成如下所示的标记:

<input type="text" name="FirstName" id="FirstName" value="" />

我讨厌 FirstName 属性是大写的。在一个完美的世界里,我想要一种方法来覆盖这个属性值的生成,这样我就可以让它说“firstName”。

我不想将 POCO 属性名称更改为小写。如此多的 ASP.NET MVC 框架是可扩展和可定制的 - 这不是吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    Display(Name = "abc") 属性会改变 Html.LabelFor 的输出以及我们使用 EditorForModel 和 DisplayForModel 时的输出。它不会影响 Html.TextBoxFor 的呈现方式,也不应该改变表单字段的 id 或 name 属性的呈现方式。如果你真的需要这样做,你必须编写自己的 html 帮助器,例如

    public static MvcHtmlString LowerTextBoxFor<TModel,TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel,TProperty>> expr)
            {
                StringBuilder result = new StringBuilder();
                TagBuilder tag = new TagBuilder("input");
                tag.MergeAttribute("type","text");
                var lowerPropertyName = ExpressionHelper.GetExpressionText(expr).ToLower();
                tag.MergeAttribute("name",lowerPropertyName);
                tag.MergeAttribute("id",lowerPropertyName);
                result.Append(tag.ToString());
                return new MvcHtmlString(result.ToString());
            }
    

    你可以在视图中使用这个 html 助手。

    @Html.LowerTextBoxFor(x=>x.Property1)
    

    请注意,此示例仅生成 id 和 name 属性。您必须为其他属性(例如不显眼的属性,甚至此方法的其他重载)编写代码才能有效地使用它

    【讨论】:

    • 这也是我做过的,但我希望有比自己重写所有助手更好的答案。
    • 也许,你能做的最好的就是覆盖 htmlAttributes 对象中的 name 和 id 属性
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多