2010-04-13 13 views

Trả lời

0

Các phương thức LabelFor, TextBoxFor, XXXFor tự động thêm id dựa vào tên của thuộc tính. Tôi không nghĩ rằng bạn có thể ghi đè điều đó. Nếu bạn muốn có thể thiết lập id, bạn sẽ cần phải sử dụng các phương thức "non-For" như Html.TextBox.

+0

Thực ra, tôi không nghĩ rằng LabelFor thêm một id ở tất cả - id có lẽ sẽ được áp dụng cho trường nhập được liên kết với nhãn. Tôi nghĩ rằng bạn đúng rằng bạn cần sử dụng phiên bản không được đánh máy mạnh để thêm các thuộc tính HTML. – tvanfosson

0

Làm thế nào về phương pháp khuyến nông này

public static class LabelExtensions 

    { 
     public static string Label(this HtmlHelper helper, string target, string id, string text) 
     { 
      return String.Format("<label for='{0}' id='{1}'>{2}</label>", target,id, text); 
     } 
    } 

Sửa

Tôi nghĩ rằng cách tốt hơn sẽ được sử dụng tương tự như tagbuilder this example và sử dụng chức năng MergeAttribute bao gồm id.

4

Dưới đây là một helper mà nên làm những gì bạn cần:

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id) 
{ 
    ModelMetadata meta = ModelMetadata.FromLambdaExpression(expression, html.ViewData), 
    string ExpressionHelper.GetExpressionText(expression) 

    string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
    if (String.IsNullOrEmpty(labelText)) { 
     return MvcHtmlString.Empty; 
    } 

    TagBuilder tag = new TagBuilder("label"); 
    tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
    tag.MergeAttribute("id", id); 
    tag.SetInnerText(labelText); 
    return tag.ToMvcHtmlString(TagRenderMode.Normal); 
} 

một sửa đổi đơn giản từ các helper LabelFor trong nguồn MVC asp.net.

0

Có lẽ hành vi đã thay đổi kể từ MVC2 bởi vì, mặc dù tôi đang sử dụng Razor và VB.NET, tôi nhận mã này để hoạt động, và nó cũng giống như ngoại lệ có thể của @ bạn đặt trước id (Bây giờ tôi đang sử dụng MVC4):

@Html.LabelFor(Function(model) model.ItemNumber, New With {.id = "ItemNumberL"}) 

này tạo ra mã HTML sau đây:

<label for="ItemNumber" id="ItemNumberL">ItemNumber</label>