我讨厌ASP.NET html帮助程序在与POCO属性相同的情况下生成名称和id属性。
大多数开发人员通常使用名称和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框架的大部分内容都是可扩展和可定制的 - 这不是什么东西吗?
答案 0 :(得分:2)
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属性。您将不得不为其他属性编写代码,例如不显眼的属性,甚至是此方法的其他重载以有效地使用它