我的View和自定义对象有一些模型作为属性,如下所示:
class SomeModel {
public object Data { get; set; }
}
并在视图中:
@model Blablabla.SomeModel
例如,在Model.Data中我添加了一些具有属性的对象:Name
,DateBirth
和Amount
。
我想为这些属性创建编辑器,如下所示:
@Html.EditorFor(m => m.Data.Name)
@Html.ValidateMessageFor(m => m.Data.Name)
但我不能这样做,因为m.Data
是object
,编译器不会通过它。对于EditorFor - 我可以用我自己的<input type="..." ... />
替换它而没有问题。
但我找不到如何将MVC的Validator(来自MicrosoftMvcValidation.js)包含到我的输入中的方法,我不想为System.ComponentModel.DataAnnotations
的所有属性创建自己的javascripts。
有没有办法在我的自定义对象中使用 MVC的Validator ,而没有关于它具有哪些属性的信息(我通过反射枚举属性来生成编辑器)。
UPD:我不能只写@Html.ValidateMessageFor(m => m.Data.Name)
,因为之前我不知道属性名称。我只能通过这样的反射来做到:@Html.ValidateMessageFor(m => m.Data.GetType().GetProperty(colName).GetValue(m.Data, null))
,其中colName
包含属性名称(Name,DateBirth或Amount)。
答案 0 :(得分:0)
我总是犹豫是否建议使用dynamic
关键字,但对于您正在做的事情,这至少是一个选项。
通过制作Data
类型的dynamic
属性,您可以在运行时为其设置属性,并在EditorFor
中使用它。
public dynamic Data { get; set; }