Question

Description

J'ai une page de paiement qui comprend un formulaire pour la saisie des informations de compte bancaire. J'encapsulé les informations de compte bancaire dans un modèle / éditeur de modèle. La page elle-même a son propre modèle Voir, ce qui arrive à contenir une propriété BankAccount à passer pour l'éditeur.

[[Modèles Voir]]

public class PaymentPageModel { 
    public SomeProperty1 { get; set; }
    public SomeProperty2 { get; set; }
    public BankAccount BankAccount { get; set; }
    ...
}

public class BankAccount { 
    public int BankAccountTypeID { get; set; }
    public string BankName { get; set; }
    public string ABACode { get; set; }
    public string AccountNumber { get; set;}
    public IEnumerable<SelectListItem> BankAccountTypes {
        get { ... // Constructs the list }
    }
}

[[page de paiement HTML]]

<% using (Html.BeginForm()) { %>
<%: Html.EditorFor(m => m.BankAccount) %>
    ... // Other miscellaneous stuff not related to the actual BankAccount
<% } %>

[[Template Editor]

...
<%: Html.DropDownListFor(m => m.BankAccountTypeID, Model.BankAccountTypes) %>
...

Problème

Dans un premier temps, cela a fonctionné parfaitement quand je fortement en tapant la page de paiement directement au modèle BankAccount. La liste déroulante était correctement remplie, et la valeur correcte du modèle a été sélectionné.

J'ai récemment modifié la page, fortement saisie à la PaymentPageModel, qui contient le modèle BankAccount comme une propriété. Le code HTML n'a pas été modifié. Le résultat maintenant est que toutes les valeurs HTML dans le modèle Editor sont correctement remplis, à l'exception du DropDownList. Elle lie la liste des valeurs bien des BankAccountTypes sélectionner la liste, mais la valeur sélectionnée est ne pas être lié. J'ai vérifié pour vous assurer que la valeur qu'il est censé lier à est correctement réglée par la sortie du résultat juste à côté du DropDownList.

Cela me rend dingue, et me rendant la question vraiment la fiabilité du modèle de liaison et HTML Helpers en général, surtout si je suis incapable de combiner des modèles de vue complexes avec l'éditeur de modèles pour encapsulent présentation / fonctionnalité.

Toutes les suggestions sont grandement appréciés.

Était-ce utile?

La solution

Si vous avez fortement typé le modèle de l'éditeur de PaymentPageModel dans votre vue principale au lieu de:

<%: Html.EditorFor(m => m.BankAccount) %>

vous pouvez essayer:

<%: Html.EditorForModel() %>

et dans votre modèle de l'éditeur:

<%: Html.DropDownListFor(m => m.BankAccount.BankAccountTypeID, 
    Model.BankAccount.BankAccountTypes) %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top