【问题标题】:Create a Template for DisplayNameFor method in Asp.net MVC在 Asp.net MVC 中为 DisplayNameFor 方法创建模板
【发布时间】:2017-01-05 17:14:50
【问题描述】:

我正在为第一种类型创建一个 Asp.net MVC 站点。

我正在创建一个详细信息页面,并使用了如下内容:

<ul>
    <li>
        @Html.DisplayNameFor(m => m.MyProp)
        @Html.DisplayFor(m => m.MyProp)
    </li>
<ul>

我得到类似的东西:

<ul>
    <li>
        MyProp
        MyPropValue
    </li>
<ul>

我希望将我的字段标题和字段值包装在单个 Span 中,这样我就可以将其格式化为全局 css,如下所示:

<ul>
    <li>
        <span class="field-label">MyProp</span>
        <span class="field-value">MyPropValue</span>
    </li>
<ul>

我想找到一种方法来做到这一点,而不必将每个字段都包含在一个跨度中。我要使用 DisplayTemplate 为 DisplayFor 方法解决这个问题,但我知道我需要为 DisplayNameFor 这样做,每次我使用此方法时它都会自动生成跨度。

我曾想过为@Html.DisplayNameFor 创建自己的替代方法,但我有点困惑该方法的签名是什么。

有人知道如何实现这一点吗?


编辑:我尝试创建一个 HtmlHelper 扩展方法,如下所示:

public static IHtmlString OxDisplayNameFor<TModel, TField> (this HtmlHelper<TModel> helper, Expression<Func<TModel, TField>> expression)
{
    return new HtmlString(String.Format(
        "<span class='display-label'>{0}</span>", "XXX"));
}

唯一剩下的就是:如何从表达式参数中获取值?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    签名与Html.DisplayNameFor的签名相同:

    public static MvcHtmlString DisplayWithDisplayNameFor<TModel, TValue>(
        this HtmlHelper<TModel> html,
        Expression<Func<TModel, TValue>> expression)
    {
        // construct a span tag and put html.DisplayNameFor(expression) in it
        // then another span tag and put html.DisplayFor(expression) in it
        // return all that
    }
    

    将它作为@helper 会更方便,但你cannot have a generic helper 不能将指向属性的 lambdas 传递给它,所以你可以做的最接近的是:

    @helper DisplayWithDisplayName(MvcHtmlString DisplayName, MvcHtmlString DisplayValue)
    {
        <span class="field-label">@DisplayName</span>
        <span class="field-value">@DisplayValue</span>
    }
    

    然后你会调用它

    @DisplayWithDisplayNameFor(Html.DisplayNameFor(m => m.MyProp), Html.DisplayFor(m => m.MyProp))
    

    【讨论】:

    • 谢谢。方法内容为:return new HtmlString(String.Format("{0}", helper.DisplayNameFor(expression).ToString()));这是最好的方法吗?
    • @Marlon 不,我会使用TagBuilder(例如stackoverflow.com/q/18214347/11683)。
    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 2017-03-20
    • 2012-09-08
    • 2011-04-22
    • 1970-01-01
    • 2012-09-18
    • 2014-04-02
    • 2021-09-17
    相关资源
    最近更新 更多