![](/img/trans.png)
[英]How to stop ASP.NET Core 2 MVC's razor engine using HTML unicode escaping?
[英]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.