Asp.net mvc 我可以向MVC3中的Html.LabelFor添加CSS类定义吗?

Asp.net mvc 我可以向MVC3中的Html.LabelFor添加CSS类定义吗?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我希望有人有一些想法。我想整理我的代码,所以我已经使用了Html.LabelFor。但是现在我想给标签分配一个CSS类 Html.LabelFor(model => model.Customer.Description ????) 有人知道这在MVC3中是否可行吗。注意,我使用的是MVC3。我已经看到了一篇关于MVC2的帖子,里面没有简单的解决方案。在MVC3中没有内置的方法来实现这一点。您必须编写帮助程序来执行此操作。查看LabelExtensions类,了解它是如何完成的。这里是

我希望有人有一些想法。我想整理我的代码,所以我已经使用了Html.LabelFor。但是现在我想给标签分配一个CSS类

Html.LabelFor(model => model.Customer.Description   ????)

有人知道这在MVC3中是否可行吗。注意,我使用的是MVC3。我已经看到了一篇关于MVC2的帖子,里面没有简单的解决方案。

在MVC3中没有内置的方法来实现这一点。您必须编写帮助程序来执行此操作。查看
LabelExtensions
类,了解它是如何完成的。

这里是buddy-o:

namespace System.Web.Mvc.Html
{
  using System;
  using Collections.Generic;
  using Linq;
  using Linq.Expressions;
  using Mvc;

  public static class LabelExtensions
  {
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
    {
      return html.LabelFor(expression, null, htmlAttributes);
    }

    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes)
    {
      return html.LabelHelper(
            ModelMetadata.FromLambdaExpression(expression, html.ViewData),
            ExpressionHelper.GetExpressionText(expression),
            HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes),
            labelText);
    }

    private static MvcHtmlString LabelHelper(this HtmlHelper html, ModelMetadata metadata, string htmlFieldName, IDictionary<string, object> htmlAttributes, string labelText = null)
    {
      var str = labelText
            ?? (metadata.DisplayName
            ?? (metadata.PropertyName
            ?? htmlFieldName.Split(new[] { '.' }).Last()));

      if (string.IsNullOrEmpty(str))
        return MvcHtmlString.Empty;

      var tagBuilder = new TagBuilder("label");
      tagBuilder.MergeAttributes(htmlAttributes);
      tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
      tagBuilder.SetInnerText(str);

      return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
    }

    private static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
    {
      return new MvcHtmlString(tagBuilder.ToString(renderMode));
    }
  }
}
namespace System.Web.Mvc.Html
{
使用制度;
使用集合。通用;
使用Linq;
使用Linq.表达式;
使用Mvc;
公共静态类标签扩展
{
公共静态MvcHtmlString LabelFor(此HtmlHelper html、表达式、对象htmlAttributes)
{
返回html.LabelFor(表达式,null,htmlAttributes);
}
公共静态MvcHtmlString LabelFor(此HtmlHelper html、表达式、字符串labelText、对象htmlAttributes)
{
返回html.LabelHelper(
ModelMetadata.FromLambdaExpression(表达式,html.ViewData),
ExpressionHelper.GetExpressionText(表达式),
HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes),
标签文本);
}
私有静态MvcHtmlString LabelHelper(此HtmlHelper html、ModelMetadata元数据、字符串htmlFieldName、IDictionary htmlAttributes、字符串labelText=null)
{
var str=labelText
??(metadata.DisplayName)
??(metadata.PropertyName)
??htmlFieldName.Split(新[]{'.}.Last());
if(string.IsNullOrEmpty(str))
返回MvcHtmlString.Empty;
var tagBuilder=新的tagBuilder(“标签”);
tagBuilder.MergeAttributes(HtmlatAttributes);
tagBuilder.Attributes.Add(“for”,tagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName));
tagBuilder.SetInnerText(str);
返回tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
}
私有静态MvcHtmlString-ToMvcHtmlString(此TagBuilder TagBuilder,TagRenderMode renderMode)
{
返回新的MvcHtmlString(tagBuilder.ToString(renderMode));
}
}
}

谢谢。只是想确认一下MVC3中没有什么新东西。我想知道为什么他们没有给Html.label多一点灵活性。我想我不是唯一一个想这么做的人。@Leeganner好吧,我是MVC团队的成员,我不知道为什么标签助手不接受
htmlAttributes
参数。也许是一些疏忽。我将提交一个bug,以确保我们在下一个版本中添加它。@marcind当您进行此操作时,是否可以取消内部帮助程序,即在LabelExtensions中,LabelHelper是内部的,因此,我们不能在滚动我们自己的帮助程序扩展时使用它。@George R-下一版本的MVC将像所有其他帮助程序一样支持
htmlAttributes
参数来启用此场景。不过,我们可能不会公开
LabelHelper
函数。但我希望这能满足您的需要。为了让现在阅读本文的人都知道,MVC4允许使用htmlAttributes参数,这就解决了这个问题。