是否有可能在ASP.NET MVC中为Html.Label和Html.LabelFor()创建LabelTemplates?

时间:2012-01-17 19:14:07

标签: asp.net-mvc

由于有问题但实际的原因,我想创建LabelTemplate默认值,就像EditorTemplates或DisplayTemplates一样。

所以不要这样:

@Html.LabelFor(x => x.PropertyName, "Property Name")

或代替此(在View Model中更好的方法):

[DisplayName("Property Name")]
public string PropertyName{ get; set; } 

我想要这个:

@Html.LabelFor(x => x.PropertyName)

有了这个(在这样的文件夹中:/ Views / Shared / LabelTemplates)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.String>" %>
//Display logic here

你能帮助编码员吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

这是您可以用来转换属性名称的代码:

Regex.Replace("PropertyName", "[a-z][A-Z]", m => m.Value[0] + " " + m.Value[1]);

答案 2 :(得分:0)

我知道这不是你问题的严格答案,但由于我仍然想提出一个行动计划,我会像这样而不是在评论中发布。


您确定要这吗?

如果您设法执行此操作,则会根据类型将字段的标签设置为某个值。乍一看这看起来很诱人 - 你可以在这里和那里为自己节省一些关键的笔画。

但是,如果你发生了什么,例如有一个类型Address包含街道名称,数字,邮政编码等的一些属性,然后希望用户以相同的形式填写家庭住址和工作地址 - 你将如何标记它们并仍然使用相同的类型?更糟糕的是 - 你真的想要在你的所有字符串上使用相同的标签吗?为了避免这两种情况,你无论如何都需要诉诸Html.DisplayFor(m => m.PropertyName, "TemplateName"),这意味着你将会像现在这样对不起。此外,您必须至少有两个地方可以查找标签的正确显示逻辑,而不仅仅是一个。

请记住,没有绝对的要求使用LabelFor()帮助器 - 您也可以在HtmlHelper上滚动自己的扩展方法,甚至忽略它们并输出平面HTML:

<label for="Person_HomeAddress">Home address</label> <!-- the ID might be wrong -->
<%: Html.EditorFor(m => m.HomeAddress) %>

由于EditorFor()输出的ID与模型名称和属性名称相匹配,因此您可以。