0

次のようなドロップダウン選択値のリストを保持するビュー モデル プロパティがあります。

  private ListDictionary _claimDropdownValueCollection = new ListDictionary();
  public ListDictionary ClaimDropdownValueCollection { get { return _claimDropdownValueCollection; } set { _claimDropdownValueCollection = value; } }

GETを実行すると、「ドロップダウンタイプ」の名前を含むビューモデルでも別のListDictionaryをループしています。

@foreach (System.Collections.DictionaryEntry de in Model.CCSetting_ClaimDropdownTypeCollection) {
                        <div class="formRow">
                            <label>@EverythingToDoWith_CCSetting_ClaimDropdownTypes.getDropdownTypeName(Model.ccClaim.clientID, Convert.ToInt32(de.Key))</label>
                            <div class="formRight searchDrop">
                                @Html.DropDownListFor(m => m.ClaimDropdownValueCollection[@de.Key], (IEnumerable<SelectListItem>) @de.Value, new { @class = "chzn-select", @data_placeholder="Choose an option...", @style="width: 350px;" })
                            </div>
                            <div class="clear"></div>
                        </div>
                    }

したがって、基本的に、これは一連のドロップダウンをロードし、それらの「ラベル」は辞書のキーに従って出力されます。EACH ドロップダウンの「値」は、IENUMERABLE をそれぞれ含む各ディクショナリの VALUE から取得されます。

これまでのところすべて順調です。ユーザーは各ドロップダウンで選択を行い、HTTP POST を実行します。ブラウザー開発者ツールで、次のデータがポストバックされているのを確認します。

ClaimDropdownValueCollection[1]:2
ClaimDropdownValueCollection[2]:5
ClaimDropdownValueCollection[3]:
ClaimDropdownValueCollection[4]:11

つまり、キー 1、2、3、4 を持つ 4 つのドロップダウン (私のキーはより複雑で、例のためにここでは単純なキーになります) で、4 つのうち 3 つに選択肢があるので、選択した ID の 2、5、11 を返します。

しかし問題は、投稿されたデータを受け取る [HttpPost] コントローラー メソッド内でデバッグするときに、このデータをビュー モデル listdictionary オブジェクトの一部として表示できないことです。これは、「ClaimDropdownValueCollection」プロパティが空であることを示しています。

私は次のようなことを言うことができることを期待しています:

foreach (DictionaryEntry de in vm.ClaimDropdownValueCollection) {
//do something here with de.Key and de.Value                        
                    }

では、RAZOR コードで何が間違っているのでしょうか?... 助けてください!

4

1 に答える 1

0

問題は、HTML ヘルパーと、私がポストバックする方法にありました。これを解決した方法は次のとおりです(職場のCTOに感謝します!):

次のように入力するリソースとして機能するビュー モデル プロパティを作成しました。

Dictionary<int, List<SelectListItem>> CCSetting_ClaimDropdownTypeCollection

同じキーを持つ別の辞書を作成しました。その値はユーザーの選択になります。

Dictionary<int, int> ClaimDropdownValueCollection

RAZOR 側では、次のようなことを行っています (HTML.DropdownFor の代わりに HTML.Hidden と HTML.Dropdown を使用していることに注意してください)。

@foreach (var de in Model.CCSetting_ClaimDropdownTypeCollection) {
                        <div class="formRow">
                                                            <div class="formRight searchDrop">
@Html.Hidden("ClaimDropdownValueCollection[" + @de.Key + "]", @de.Key)
                                @Html.DropDownList("ClaimDropdownValueCollection[" +  @de.Value + "]", @de.Value, new { @class = "chzn-select", @data_placeholder="Choose an option...", @style="width: 350px;" })
                            </div>
                            <div class="clear"></div>
                        </div>
                    }

おそらく、私の質問をより良い方法で表現していないことをお詫びします。おそらく、何時間もの欲求不満の後に投稿し、言い回しがうまくいかなかったのでしょう。この質問で「Tumbleweed」バッジを取得したことが、私が戻ってきて解決策を投稿する動機になりました。閉じてもいいです。誰かがいつかこれに出くわすことを願っています!

于 2013-01-30T14:19:57.853 に答える