1

ラベルのような短い説明と、この説明に関連付けられたその近くのデータを表示する必要があります。データを編集する場合は次のようになります

<div class="field">
    @Html.LabelFor(m => m.CustomerTaxId)
    @Html.EditorFor(m => m.CustomerTaxId)
</div>

ここで、読み取り専用データに対して同じことをしたいと思います。次のコードを書きました

<div>
    @Html.LabelFor(m => m.TotalAmount)
    @Html.DisplayFor(m => m.TotalAmount)
</div>

機能しているように見えますが、入力タグのみに使用する必要があるラベルタグのセマンティックな意味が壊れています。MVC 3で次のようなものを取得する方法はありますか

<div>
   <span class="label">Total amount</span>
   <span class="value">1500.00 $</span>
</div>

最小限の労力で(テンプレートを大量に使用して実行できると考えてください)

Html.DisplayFor対処方法のテンプレートを上書きできるようHtml.LabelForです。

4

1 に答える 1

3

以下のようにカスタム html ヘルパーを作成できます。

public static MvcHtmlString Span<TModel, TValue>(this HtmlHelper<TModel> html, 
         Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
  var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData, null);
  string spanInnerText = metadata.DisplayName ?? metadata.PropertyName;

  TagBuilder tag = new TagBuilder("span");
  tag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
  tag.SetInnerText(spanInnerText);

  return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}

ビューで次のように使用できます。

@Html.Span(m => m.Name, new { @class = "label" })
于 2012-06-11T13:49:35.643 に答える