2011-08-02 12 views
0

に私の拡張メソッドを変更することができ、私はウェブ上で発見この拡張機能を使用することを開始しました:どのように私はC#の

@Html.LabelFor(m => m.Login.RememberMe, new { @class = "adm" }) 

結果はこのようなものです:

public static class NewLabelExtensions 
    { 
     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, IDictionary<string, object> htmlAttributes) 
     { 
      var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
      var htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
      var labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
      if (String.IsNullOrEmpty(labelText)) 
      { 
       return MvcHtmlString.Empty; 
      } 

      var tag = new TagBuilder("label"); 
      tag.MergeAttributes(htmlAttributes); 
      tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
      tag.SetInnerText(labelText); 
      return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
     } 
    } 

は、私はこのようにそれを使用:

<label class="adm" for="Login_RememberMe">Remember me?</label> 

ただし、このラベルのスタイルを設定します。私は実際に私が使っているコードを理解していません。誰でもLabelForメソッドを生成する上のコードに変更を提案できますか?

<label class="adm" id="Login_RememberMe" for="Login_RememberMe">Remember me?</label> 

おかげ

+0

なぜあなたは自分自身のためのラベルを作成したいですか? idとfor属性は同じであってはなりません。 – VJAI

答えて

2
あなただけの下の行を追加する必要があり

tag.Attributes.Add("id", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 

コード:

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
     var htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
     var labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
     if (String.IsNullOrEmpty(labelText)) 
     { 
      return MvcHtmlString.Empty; 
     } 

     var tag = new TagBuilder("label"); 
     tag.MergeAttributes(htmlAttributes); 
     tag.Attributes.Add("id", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
     tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
     tag.SetInnerText(labelText); 
     return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
    }