2012-03-21 11 views

答えて

0

これは可能です(表示属性内のテキストのスタイルを設定するには)?

この問題は[Display]属性内にはありません。これはあなたが表示に使用したHtml.LabelForヘルパーの中にあります。この属性は常に値をHTMLでエンコードします。その後、

public static class HtmlExtensions 
{ 
    public static IHtmlString MyLabelFor<TModel, TProperty>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression 
    ) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData); 
     var htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
     var labelText = (metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>())); 
     if (string.IsNullOrEmpty(labelText)) 
     { 
      return MvcHtmlString.Empty; 
     } 
     var label = new TagBuilder("label"); 
     label.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName))); 
     label.InnerHtml = labelText; 
     return new HtmlString(label.ToString()); 

    } 
} 

と:あなたは、この動作が気に入らない場合は、値をエンコードしませんカスタムヘルパーを書くことができ

@Html.MyLabelFor(x => x.Foo) 
+0

をこれがとてもうまくいきました。ありがとう。しかし、今私は別の問題に遭遇し、新しい質問を開きました:http://stackoverflow.com/questions/9824252/trying-to-modify-a-builder-to-style-text-in-dataannotation-attribute- displayna – REMESQ

+0

EditorForまたはDisplayFor(つまりカスタムヘルパー)でも同じことをする必要がありますか?もしそうなら、上記のコードをコピーしてMyEditorForと呼ぶことができますか?ありがとう。 – REMESQ

+0

私はEditorFor/DisplayForヘルパーのために[デフォルトテンプレート](http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates)を上書きできると思います。 html)に 'MyLabelFor'ヘルパーを呼び出します。 –