我有一个视图模型:
public class AttributeEditorViewModel
{
public long AttributeId { get; set; }
public string DisplayName { get; set; }
public object Value { get; set; }
}
该模型是使用模型构建器构建的,因此最终视图模型具有上述对象的列表:
public class AttributeListViewModel
{
public List<AttributeEditorViewModel> Attributes { get; set; }
}
我的模型构建器编译了一个 AttributeEditorViewModel 对象列表,并将适当的原始类型设置为 Value 属性。数据类型来自属性的单独定义。
现在 Razor 视图(可以说是 edit.cshtml)看起来像:
@model AttributeListViewModel
@Html.EditorFor(m => m.Attributes)
和编辑器模板 Views/Shared/EditorTemplates/AttributeEditorViewModel.cshtml:
@model AttributeEditorViewModel
<div>
<label>@Model.DisplayName</label>
@Html.EditorFor(m => m.Value)
@Html.ValidationMessageFor(m => m.Value)
</div>
我的期望;如果我将 AttributeEditorViewModel 的 Value 属性设置为双精度,如下所示:
public ActionResult Edit()
{
return View(new AttributeListViewModel
{
Attributes = new List<AttributeEditorViewModel>
{
new AttributeEditorViewModel { DisplayName = "Double example", Value = (double) 0 }
}
};
}
我希望会呈现一个文本框。相反,它什么也不渲染。我添加了另一个编辑器模板 Views/Shared/EditorTemplates/Double.cshtml:
@model double
@Html.TextBoxFor(m => m)
这解决了眼前的问题。所以现在我得到一个值为 0 的文本框。然而,即使在自定义编辑器模板中使用 EditorFor 也不会呈现任何内容。
使用对象作为基本类型是根本错误的吗?为什么在使用 EditorFor 或 EditorForModel 时什么都不渲染?
任何见解表示赞赏。