我想在我的标签上添加一些课程,因此我在Label.cshtml
文件夹下添加了Shared/EditorTemplates
。似乎Razor无视它。我也试过了DisplayTemplates
文件夹,但它也没有用。
我可以为标签设置编辑器模板吗?如果不是,那么定制它们的最佳方式是什么?
Label.cshtml:
@model object
@Html.LabelFor(m => m, new { @class = "col-xs-4 control-label" })
更新
这是我从this post获取的代码以及此useful link的一些更改。它仍然无法运作,我不知道发生了什么。有人可以帮忙吗?
public static class Extensions
{
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes));
}
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
return LabelFor(html, expression, null);
}
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes){
ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string FieldName = ExpressionHelper.GetExpressionText(expression);
string LabelText = metaData.DisplayName ?? metaData.PropertyName ?? FieldName.Split('.').Last();
if (string.IsNullOrEmpty(LabelText))
return MvcHtmlString.Empty;
TagBuilder tag = new TagBuilder("label");
tag.MergeAttributes(htmlAttributes);
tag.SetInnerText(LabelText);
tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(FieldName));
tag.Attributes.Add("class", "control-label col-xs-2");
return MvcHtmlString.Create(tag.ToString());
}
}
答案 0 :(得分:1)
EditorTemplate and DisplayTemplate基于属性类型。您可以creating your own HTML helper执行此操作。
public static class LabelExtensions
{
public static string Label(this HtmlHelper helper, string target, string text)
{
return String.Format("<label for='{0}'>{1}</label>", target, text);
}
}
答案 1 :(得分:1)
EditorTemplate
基于属性的类型(不在他们生成的html元素上)。您需要创建自己的html帮助器
public static MvcHtmlString BootstrapLabelFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
var attributes = new { @class = "col-xs-4 control-label" };
return helper.LabelFor(expression, attributes);
}
并在视图中将其用作
@Html.BootstrapLabelFor(m => m.yourProperty)
然而,这似乎是一种不灵活的方式来使用帮助器来保存在标准LabelFor()
帮助器中添加html属性。根据{{3}},在一个帮助器中组合关联的文本框和验证消息可能更有用(请注意,此答案还说明了如何将命名空间添加到web.config
文件