Question

Voici la situation. J'ai quelques ViewModels qui contiennent des types de modèles complexes imbriqués. Voici un extrait de l'un des modèles (ce n'est pas une classe complète):

/// <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

Et un extrait de la classe ContactModel (pas complète):

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

Mon problème est que je dois être en mesure d'obtenir les attributs de validation du type de modèle imbriqué, ContactModel, pour la validation côté client. J'utilise l'approche manuelle dans la plupart des points de vue parce que je ne pas utiliser le * Pour () des méthodes d'aide. Voici ce que je fais:

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

Cela fonctionne comme un champion et produit les attributs de validation attendus du modèle, seulement, lorsque le modèle de la vue est le modèle qui a le « validation » attributs appliqués. Lorsque le modèle ayant la attributs « de validation » est dans un objet modèle imbriqué, cela ne fonctionne pas. Je me bats à essayer de comprendre comment obtenir les attributs de validation pour ce scénario. La vue est compliquée et je ne peux pas le décomposer plus loin en plusieurs vues de modèles, donc je besoin de travailler avec un modèle imbriqué.

J'ai essayé de nombreuses approches, mais pas entrer dans les encore dans une tentative d'obtenir des réponses viciées. Je dirai que je l'ai essayé d'utiliser mon préfixe de liaison ainsi que passer par une partie de l'électricité statique « ModelMetadata » classes pour percer dans ma structure de modèle imbriqué, mais pour l'instant pas de chance. Toute aide est appréciée.

Laissez-moi savoir ce que vous devez peut-être aider.

J'ai lu aussi beaucoup de messages de blog de Brad Wilson, ainsi que d'autres gars dans son royaume, mais pas de chance jusqu'à présent.

Était-ce utile?

La solution

Vous devez fournir le nom complet de l'attribut:

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

Où "Contact" est le nom de l'instance

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top