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 回答