有没有办法使用LabelFor助手并自定义标签文本而无需在我的模型中使用DisplayNameAttribute?
答案 0 :(得分:20)
我为我的项目创建了这个html助手:
public static class MyLabelExtensions
{
public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText)
{
return Label(htmlHelper, forName, labelText, (object) null);
}
public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText,
object htmlAttributes)
{
return Label(htmlHelper, forName, labelText, new RouteValueDictionary(htmlAttributes));
}
public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText,
IDictionary<string, object> htmlAttributes)
{
var tagBuilder = new TagBuilder("label");
tagBuilder.MergeAttributes(htmlAttributes);
tagBuilder.MergeAttribute("for", forName.Replace(".", tagBuilder.IdAttributeDotReplacement), true);
tagBuilder.SetInnerText(labelText);
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
}
public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
string labelText)
{
return LabelFor(htmlHelper, expression, labelText, (object) null);
}
public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
string labelText, object htmlAttributes)
{
return LabelFor(htmlHelper, expression, labelText, new RouteValueDictionary(htmlAttributes));
}
public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
string labelText,
IDictionary<string, object> htmlAttributes)
{
string inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.Label(inputName, labelText, htmlAttributes);
}
}
我将它们用于“强类型”资源:
<%= Html.LabelFor(m=>m.NickName, UserStrings.NickName) %>
希望有帮助...
答案 1 :(得分:14)
MVC3 RC中有一个新的LabelFor重载,允许您指定labelText。
答案 2 :(得分:1)
为什么不创建自己的Html Helper?
public static class MVCHelpers
{
public static string CustomLabelFor(this HtmlHelper helper, string ...)
{
return "<label ... </label>"
}
}
答案 3 :(得分:1)
我发现这非常有用。我认为这是MVC 2中缺少的东西。或者至少我没有找到一种方法来构建它。
最简单的案例详细说明了此功能的必要性。我有两个对象联系人和地址。联系人可以有多个Addesses
地址
联系
现在,对于编辑或显示联系人的表单,能够更改地址“街道”属性上的DisplayNameAttribute并不是很有帮助,因为我真的希望一个字段为“商业街”而另一个字段为“家庭街” ”。