我正在尝试利用DisplayTemplates
razor-engine 中的功能来自动渲染我的显示视图。
我扫描我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")
. 我还有另一个名为的显示模板Status.cshtml
,它接受布尔值并返回“活动”或“非活动”。两个显示模板都位于~/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
根据属性数据类型正确显示使用正确显示模板的对象?