簡體   English   中英

如何在ASP.NET MVC應用程序中使用Razor-engine中的Html.Displar渲染ModelMetadata對象?

[英]How to render ModelMetadata object using Html.Displar in Razor-engine in ASP.NET MVC app?

我正在嘗試利用razor-engine中的DisplayTemplates功能來自動渲染我的顯示視圖。

我掃描我的Model ,為我想要顯示的每個屬性找到正確的ModelMetadata 但我無法正確使用Html.DisplayFor呈現屬性。

我試圖像這樣展示我的財產

// First I find the ModelMetadata for the property
// I call this statement in a loop and each iteration I pass a different PropertyName to get the correct model
ModelMetadata columnMetadata = elementsMetadata.First(x => x.PropertyName == column.PropertyName);

// I attempted to render the columnMetadata object like so
Html.DisplayFor(x => columnMetadata.Model)

上面的代碼“在顯示正確的值方面”但是它沒有使用導致格式錯誤的正確的DisplayTemplate

例如,我有一個名為Currency.cshtml的編輯器模板, Model.ToString("C")顯示Model.ToString("C") 我還有另一個名為Status.cshtml顯示模板,它接受布爾值並返回“活動”或“非活動”。 兩個display-template都位於~/Views/Shared/DisplayTemplates

但由於某些原因, Html.DisplayFor()沒有尋找合適的template 以下是我的一個視圖模型的示例

public class ViewModel
{
    public string Name { get; set; }

    [DataType(DataType.Currency)]
    public decimal Rate { get; set; }

    [DataType("Status"), DisplayName("Status")]
    public bool Active { get; set; }
}

目前,我的視圖顯示Active屬性的禁用復選框和我的Rate屬性的非格式化數字。

如何根據屬性數據類型正確顯示使用正確顯示模板的ModelMetadata對象?

ModelMetadata包含DataTypeName屬性,它包含由所產生的價值DataTypeAttribute ,這將是“貨幣”為您Rate特性和“狀態”為你Status屬性。 您可以在DisplayFor()的第二個參數中使用此值

ModelMetadata columnMetadata = elementsMetadata.First(x => x.PropertyName == column.PropertyName);
string template = columnMetadata.DataTypeName;
Html.DisplayFor(x => columnMetadata.Model, template)

另請注意,您可以使用UIHintAttribute ,例如,它還設置DataTypeName的值

[Display(Name = "Status")] // use this rather that [DisplayName]
[UIHint("Status")]
public bool Active { get; set; }

暫無
暫無

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

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