asp.net mvc 3 Html.GetUnobtrusiveValidationAttributes и вложенные модели - PullRequest
3 голосов
/ 17 марта 2011

Вот ситуация. У меня есть несколько моделей ViewModel, которые содержат вложенные сложные типы моделей. Вот фрагмент одной из моделей (это не полный класс):

/// <summary>
/// Defines the overall view when viewing contact details.
/// </summary>
public sealed class ContactDetailsViewModel : BaseViewModel
{
    public ContactDetailsViewModel() : base() { }
    public ContactDetailsViewModel(WebSession webSession) : base(webSession) { }
    public ContactDetailsViewModel(WebSession webSession, string returnUrl) : base(webSession, returnUrl) { }

    #region Contact
    /// <summary>
    /// The contact being viewed.
    /// </summary>
    public ContactModel Contact { get; set; }
    #endregion

И фрагмент из класса ContactModel (не полный):

    #region Company
    [Required(AllowEmptyStrings = false)]
    [StringLength(128)]
    public string Company { get; set; }
    #endregion

Моя проблема в том, что мне нужно иметь возможность получить атрибуты проверки из вложенного типа модели, ContactModel, для проверки на стороне клиента. Я использую ручной подход в большинстве представлений, потому что я не использую вспомогательные методы * For (). Вот что я делаю:

@Html.TextBox(
_titleField,
Model.Contact.Title,
new Dictionary<string,object>(Html.GetUnobtrusiveValidationAttributes("Company"))
{
    { "class", "CTextBox" },
    { "style", "width:100%;" }
})

Это работает как чемпион и выдает ожидаемые атрибуты проверки ТОЛЬКО из модели, если моделью для представления является Модель, к которой применены атрибуты "проверки". Когда модель имеет " атрибуты проверки »находятся во вложенном объекте Model, это не работает. Я изо всех сил пытаюсь выяснить, как получить атрибуты проверки для этого сценария. Представление является сложным, и я не могу далее разбивать его на несколько представлений моделей, поэтому мне нужно, чтобы он работал с вложенной моделью.

Я перепробовал множество подходов, но пока не буду вдаваться в них, пытаясь получить незапланированные ответы. Я скажу, что пытался использовать свой префикс привязки, а также проходил через некоторые статические классы "ModelMetadata", чтобы углубиться в структуру моей вложенной модели, но пока что не повезло. Любая помощь приветствуется.

Дайте мне знать, что еще вам может понадобиться, чтобы помочь.

Я также прочитал много постов в блоге Брэда Уилсона и других парней из его королевства, но пока не повезло.

1 Ответ

3 голосов
/ 21 марта 2011

Необходимо указать полное имя атрибута:

(Html.GetUnobtrusiveValidationAttributes("Contact.Company"))

Где «Контакт» - это имя экземпляра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...