是否可以在ASP.NET MVC中为Html.Label和Html.LLabelFor()创建LabelTemplate



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

因此,取而代之的是:

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

或者取而代之(在视图模型中更好的方法):

[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

你能帮一个程序员吗?

创建自己的自定义html助手。

http://develoq.net/2011/how-to-create-custom-html-helpers-for-asp-net-mvc-3-and-razor-view-engine/

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

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

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


你确定要这个吗

如果您能够做到这一点,您将根据字段的类型将字段的标签设置为某个值。乍一看,这可能很诱人——你可能会为自己省去一些关键的一击。

但是,如果您的类型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,所以您就可以了。

最新更新