MVC валидатор для пользовательского объекта - PullRequest
0 голосов
/ 04 июля 2011

У меня есть некоторая модель для моего вида и пользовательский объект в виде свойства, например:

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="..." ... />.

Но я не могу найти способ включить Validator MVC (из MicrosoftMvcValidation.js) в мой ввод, и я не хочу создавать свои собственные javascripts для всех атрибутов из 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 содержит имя свойства (Name, DateBirth или Amount).

1 Ответ

0 голосов
/ 04 июля 2011

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

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

public dynamic Data { get; set; }
...