問題バインディング選択された値は、エディターテンプレート内のドロップダウンリストに表示されます

StackOverflow https://stackoverflow.com/questions/3979191

質問

説明

銀行口座情報を入力するためのフォームを含む支払いページがあります。銀行口座情報をモデル /エディターテンプレートにカプセル化しました。ページ自体には独自のビューモデルがあり、たまたま編集者に渡されるBankccountプロパティが含まれています。

[モデルを表示]

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

[支払いページHTML]

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

[エディターテンプレート

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

問題

当初、これは、私が支払いページをBankaccountモデルに直接直接テーピングしていたときに完全に機能しました。ドロップダウンリストが適切に入力されており、モデルからの正しい値が選択されていました。

私は最近、ページを変更して、bankaccountモデルをプロパティとして含むPaymentPageModelに強く入力しました。 HTMLは変更されていません。その結果、ドロップダウンリストを除き、エディターテンプレート内のすべてのHTML値が適切に入力されています。 BankAccountTypes選択リストから値のリストを適切に結合していますが、選択された値はバインドされていません。ドロップダウンリストのすぐ隣に出力することにより、拘束力があると思われる値が適切に設定されていることを確認するためにチェックしました。

これは私を夢中にさせ、特に複雑なビューモデルとエディターテンプレートを組み合わせてプレゼンテーション/機能をカプセル化することができない場合、モデルバインディングとHTMLヘルパーの信頼性について本当に疑問を呈しています。

どんな提案でも大歓迎です。

役に立ちましたか?

解決

エディターテンプレートを強く入力した場合 PaymentPageModel の代わりにあなたのメインビューで:

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

あなたは試すことができます:

<%: Html.EditorForModel() %>

エディターテンプレートで:

<%: Html.DropDownListFor(m => m.BankAccount.BankAccountTypeID, 
    Model.BankAccount.BankAccountTypes) %>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top