2012-04-13 4 views
0

DropDownListFor()で実装されたドロップダウンリストを持つビュー上にフォームがあります。このViewは、ViewModelに厳密に型指定されます。ViewModelには、ドロップダウンのオプションを保持するSelectListプロパティと、ドロップダウンの選択された値を保持する別のプロパティがあります。これはうまくいきますが、私がしたいのは、選択した値とドロップダウンの選択したテキストの両方を2番目のプロパティに保持することです。私がこれをしたい理由は、フォームselfpostsとして、私はそれぞれの選択のテキストと値の両方を持っているのでです。DropDownListFor()値とビューモデルへのテキストのバインド

私は、選択された値のプロパティをintからKeyValuePairに変更しようとしましたが、フォームの提出時にintの部分だけが設定されました。

おそらく、これを達成するためのより良い方法があります。私は、私の方法の部分的な再設計を含むすべての提案に開放されています。

コントローラのドロップダウンを吐き出すために(建物のSelectListの)

SelectList leadTypeGroups = new SelectList(_enrollmentRepository.GetLeadTypeGroups(), "Key", "Value"); 

のViewModel

public KeyValuePair<int, string> LeadTypeGroupID { get; set; } 
public SelectList LeadTypeGroups { get; set; } 

ビュー

@Html.DropDownListFor(selected => Model.LeadTypeGroupID, Model.LeadTypeGroups, " ") 

答えて

1

は、サーバがリクエストごとにデータベース(またはメモリ内キャッシュ)から値を引っ張ってもらいます。または、ドロップダウン選択が変更されるたびに適切なテキストでjavascriptを更新する隠しフィールドをjavascriptで作成します。

0

一覧に変更ViewModelにして、forループを使用しますリスト内の各項目について以下のような何か...

ビュー

@for(int i = 0; i < Model.LeadTypeGroupIDs; i++) 
{ 
    @Html.DropDownListFor(x => Model.LeadTypeGroupIDs[i], Model.LeadTypeGroups, " ") 
} 

のViewModel

public List<string> LeadTypeGroupIDs { get; set; } 
public SelectList LeadTypeGroups { get; set; } 
+0

恐らく私は問題を明らかに説明していないかもしれません。私はLeadTypeGroupsの複数のドロップダウンを望んでいません。これは1つのドロップダウンです。私がしたいのは、選択した値と選択したテキストの両方をビューモデルの1つのプロパティに取り込むことだけです。 – EkoostikMartin

+0

なぜですか?あなたの属性(LeadTypeGroup)はあなたのデータベースに保存されていなければなりません。あなたはIdを使うべきです - なぜテキストも必要ですか? – Moo

+0

良い質問です。私の最初のビューがフォームを投稿した後、私はいくつかの処理を行いますが、フォーム値をデータベースにコミットしません。 View HttpPostは確認ページを表示する2番目のView(RedirectToActionを使用)を呼び出します。この確認ページでは、バックエンド処理の結果とともに、最初のビューから選択した値を再表示する必要があります。送信された確認ページは、実際にデータベースに変更をコミットします。 – EkoostikMartin

関連する問題