ASP.NET MVC可以生成具有小写名称和id属性的元素

Bry*_*isi 7 asp.net-mvc

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

大多数开发人员通常使用名称和id的小写值,但我似乎无法在ASP.NET MVC中找到实现此目的的方法.

通过源代码查看显示无法覆盖此功能,但我可能错了.

这是可能吗?

编辑:我会更具体,我正在谈论的例子,因为似乎有一些混乱.

我的模型看起来像这样:

public class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

@Html.InputFor(m => m.FirstName)
Run Code Online (Sandbox Code Playgroud)

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

<input type="text" name="FirstName" id="FirstName" value="" />
Run Code Online (Sandbox Code Playgroud)

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

我不想将POCO属性名称更改为小写.ASP.NET MVC框架的大部分内容都是可扩展和可定制的 - 这不是吗?

Muh*_*hid 2

Display(Name = "abc")当我们使用 EditorForModel 和 DisplayForModel 时,属性会更改 Html.LabelFor 的输出。它不会影响 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());
        }
Run Code Online (Sandbox Code Playgroud)

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

@Html.LowerTextBoxFor(x=>x.Property1)
Run Code Online (Sandbox Code Playgroud)

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