0

MVCにデュアル リスト ボックスがあります。選択したリストボックス内のすべてのアイテムの ID をサーバーに送信する必要があります。モデルには 3 つのプロパティが定義されています

IEnumerable<SelectListItem> AvailItems {get;set;}
IEnumerable<SelectListItem> SelectedItems {get;set;}
string SelectedItemIds {get;set;} 

隠しフィールドとして異なる名前とavailItemsプロパティを持つリストボックスを作成しました。ユーザーがリストボックスに項目を追加/削除すると、Javascript は隠しフィールドを更新します。httpost では、リストボックスの名前が変更されたためにのみ受信しますが、これは予期された動作です。selectedItemsSelectedItemIdsselectedItemIds

問題は、モデルが無効であるか、何らかの例外が発生し、returnView(model)が実行され、リストボックスに空の値が入力されているがhiddenfield、変更された項目の値が含まれている場合です。そして、ユーザーが再びページを送信すると、hiddenfield投稿された項目の値はデータベースから取得されます。hiddenfield非jsユーザーがページを送信しても害がないため、送信前にすべてのアイテムを選択する代わりに(javascriptを使用して)使用するこのアプローチに従いました。からの値がhiddenfield取得されます。

上記の状況に対処する方法のアイデアはありますか?

4

1 に答える 1

1

実行する前に、その情報をモデルに再入力してみませんView(model)か? 次のようなコードがあると仮定しています。

if (ModelState.IsValid) 
{
    //...all is ok
}
else 
{
    model.AvailItems = // repopulate
    model.SelectedItems = // repopulate
    return View(model);
}
于 2012-09-16T06:40:07.107 に答える