![](/img/trans.png)
[英]ASP.NET MVC. How use DisplayNameFor in order to create a table heading and body?
[英]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.