【问题标题】:Render span tag with title attribute with ASP.NET MVC 3 Helpers使用 ASP.NET MVC 3 Helpers 渲染具有标题属性的 span 标签
【发布时间】:2011-05-14 11:07:09
【问题描述】:

可以将 HTML title 属性添加到输入标签,如下所示:

@Html.TextBoxFor(model => model.Name, new { title = "Customer name" })

静态文本有类似的助手吗?使用@Html.DisplayFor(model => model.Name),我可以从模型属性呈现文本。如何添加 HTML 属性,以便获得像这样呈现的span 标记:

<span title="Customer name">ABC</span>

【问题讨论】:

  • 这个问题被明确标记为“MVC 3”,但请注意,对于第 4 版(剃刀 2)及更高版本,您可以摆脱例如&lt;span title="@Model.NameTooltip"&gt;@Model.Name&lt;/span&gt;

标签: asp.net asp.net-mvc asp.net-mvc-3 html-helper


【解决方案1】:

自定义 html 助手可能是最简洁的解决方案。

public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
    var valueGetter = expression.Compile();
    var value = valueGetter(helper.ViewData.Model);

    var span = new TagBuilder("span");
    span.MergeAttributes(new RouteValueDictionary(htmlAttributes));
    if (value != null)
    {
        span.SetInnerText(value.ToString());
    }

    return MvcHtmlString.Create(span.ToString());
}

=>

@Html.SpanFor(model => model.Name, new { title = "Customer name" })

【讨论】:

  • 效果很好!我只需要知道value 可以是nullif (value != null) 之前是span.SetInnerText(value.ToString()); 非常感谢!
  • 绑定到这个 spanfor 的数据在 httpPost 期间不可用...任何更新
  • 我对数据属性有这个问题,你需要用 HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes) 包装 htmlAttributes 否则它不会像其他对象一样替换 _ 。
【解决方案2】:
<span title="Customer name">@Model.Name</span>

【讨论】:

  • &lt;span title="Customer name"&gt;@Html.DisplayTextFor(m =&gt; m.Name)&lt;/span&gt; 如果Name 可以是null
  • 那么,有没有可以创建这个 span 标签的内置助手?
【解决方案3】:

如果你使用@HTML.DisplayFor(model=>model.CustomerName) 它将呈现为文本,它不会在值内显示任何标签。

如果您想使用 span 绑定“DisplayFor”,请使用以下标签,

<span id="CustomerName">@Html.DisplayFor(model=>model.CustomerName)</span>

【讨论】:

  • 此解决方案允许我继续使用 @Html.DisplayFor 使用的日期时间值的显示模板,并为跨度添加标题。
【解决方案4】:

丑陋,但有效 ;-)(必填字段,不渲染 .EditorFor 内容在提交过程中丢失,甚至 HTML 注释也不起作用,在 System.Web.Mvc 5.0.0.0 上测试)

<b style="display:none">@Html.EditorFor(model => model.UserName)</b>
<input name="UserName" disabled readonly value=@Html.DisplayTextFor(model => model.UserName)>

原来的样子:

<input class="text-box single-line" data-val="true" data-val-required="The User Name field is required." id="UserName" name="UserName" type="text" value="Hate Razor !">

【讨论】:

    【解决方案5】:

    你用下面的

    <span title="Customer name">@Html.DisplayTextFor(m => m.CustomerName)</span>
    

    【讨论】:

    • 这不会创建 span 标签。
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多