簡體   English   中英

在Asp.net MVC中為DisplayNameFor方法創建模板

[英]Create a Template for DisplayNameFor method in Asp.net MVC

我正在為第一種類型創建一個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進行此操作,因此我每次使用此Method都會自動生成跨度。

我曾考慮過為@ 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"));
}

剩下的唯一事情是:如何從expression參數獲取值?

簽名將與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會更方便,但是您不能擁有泛型幫助程序 ,因此無法將指向屬性的lambda傳遞給它,因此您可以執行的最接近的操作是:

@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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM