由于有问题但实际的原因,我想创建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
你能帮助编码员吗?
答案 0 :(得分:1)
创建自己的自定义html助手。
http://develoq.net/2011/how-to-create-custom-html-helpers-for-asp-net-mvc-3-and-razor-view-engine/
答案 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与模型名称和属性名称相匹配,因此您可以。