我正在尝试利用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
它接受布尔值并返回“Active”或“Inactive”。两个显示模板都位于~/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
根据属性数据类型使用正确的显示模板的对象?