2012-05-15 37 views
14

Tôi cố gắng để thêm một lớp css để Html.LabelFor trên một EditorTemplateMở rộng MVC3 dao cạo Html.LabelFor thêm css lớp

@Html.LabelFor(model => model.Name, new { @class = "myLabel" }) 

mong đợi của tôi ví dụ: nhãn nên nhặt lớp css.

Vì điều này, tôi đã cố gắng mở rộng Nhãn bằng mã sau đây, nhưng nhãn của tôi không hiển thị. Tôi đang làm gì sai ở đây?

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)); 
     } 
    } 

Nếu tôi không chỉ định lớp css chẳng hạn @Html.LabelFor(model => model.Name) thì nó sẽ hiển thị nhãn. Nhưng tôi không thể áp dụng css cho nhãn của mình. Tôi muốn hiển thị nhãn màu xanh, khi tải trang., Sau đó thay đổi kiểu nhãn dựa trên hành động của người dùng bằng cách sử dụng jquey.Tất cả là tốt, trên trang của tôi ngoại trừ thực tế là tôi không thể mở rộng và thêm css đến lớp của tôi.

+1

Vui lòng xác định "không hoạt động". Kết quả bạn mong đợi là gì và kết quả bạn nhận được là gì? – Aaronaught

+0

Bạn đang gặp phải vấn đề gì? –

Trả lời

16

Tôi nghi ngờ rằng bạn đã quên mang không gian tên mà bạn đã xác định lớp LabelExtensions này trong phạm vi trong chế độ xem. Vì vậy, ví dụ nếu lớp này được định nghĩa bên trong namespace MyProject.Extensions:

namespace MyProject.Extensions 
{ 
    public static class LabelExtensions 
    { 
     ... 
    } 
} 

hãy chắc chắn rằng bạn đã mang namespace này vào phạm vi:

@using MyProject.Extensions 
@model MyViewModel 
... 
@Html.LabelFor(model => model.Name, new { @class = "myLabel" }) 
0

Bạn đang sử dụng html.LabelHelper

Tuy nhiên bạn đã xác định phương pháp LabelHelper của riêng mình, vì vậy hãy sử dụng phương thức này =)

Các vấn đề liên quan