0

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

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.Datais object,编译器不会通过它。如果使用 EditorFor - 我可以用我自己的替换它<input type="..." ... />而不会出现问题。

但是我找不到如何将 MVC 的验证器(来自 MicrosoftMvcValidation.js)包含到我的输入中的方法,并且我不想为来自System.ComponentModel.DataAnnotations.

有没有一种方法可以为我的自定义对象使用MVC 的验证器,而无需提供有关它具有哪些属性的信息(我通过反射枚举属性来生成编辑器)。

UPD:我不能写,@Html.ValidateMessageFor(m => m.Data.Name)因为我以前不知道属性名称。我只能通过这样的反射来做到这一点:@Html.ValidateMessageFor(m => m.Data.GetType().GetProperty(colName).GetValue(m.Data, null)),其中colName包含属性名称(名称、出生日期或金额)。

4

1 回答 1

0

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

通过将您的Data属性设为类型dynamic,您将能够在运行时在其上设置属性,并在您的EditorFor.

public dynamic Data { get; set; }
于 2011-07-04T10:26:04.293 回答