自定义对象的MVC验证器

时间:2011-07-04 10:22:13

标签: asp.net-mvc asp.net-mvc-validation

我的View和自定义对象有一些模型作为属性,如下所示:

class SomeModel {
  public object Data { get; set; }
}

并在视图中:

@model Blablabla.SomeModel

例如,在Model.Data中我添加了一些具有属性的对象:NameDateBirthAmount。 我想为这些属性创建编辑器,如下所示:

@Html.EditorFor(m => m.Data.Name)
@Html.ValidateMessageFor(m => m.Data.Name)

但我不能这样做,因为m.Dataobject,编译器不会通过它。对于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)。

1 个答案:

答案 0 :(得分:0)

我总是犹豫是否建议使用dynamic关键字,但对于您正在做的事情,这至少是一个选项。

通过制作Data类型的dynamic属性,您可以在运行时为其设置属性,并在EditorFor中使用它。

public dynamic Data { get; set; }