MVC валидатор для пользовательского объекта

У меня есть некоторая модель для моего 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 (из MicrosoftMvcValidation.js) в мой ввод, и я не хочу создавать свои собственные javascript для всех атрибутов из System.ComponentModel.DataAnnotations,

Есть ли способ использовать Validator MVC для моего пользовательского объекта без информации о том, какие свойства он имеет (я создаю редакторы, перечисляя свойства через Reflection).

UPD: я не могу просто написать @Html.ValidateMessageFor(m => m.Data.Name) потому что я не знаю об имени свойства раньше. Я могу сделать это только через Отражение так: @Html.ValidateMessageFor(m => m.Data.GetType().GetProperty(colName).GetValue(m.Data, null)), где colName содержит имя свойства (имя, дата рождения или сумма).

1 ответ

Я всегда не решаюсь предложить использование dynamic Однако ключевое слово для того, что вы делаете, это как минимум один вариант.

Делая ваши Data свойство типа dynamic вы сможете установить свойства для него во время выполнения, а также использовать его в своем EditorFor,

public dynamic Data { get; set; }
Другие вопросы по тегам