ドロップダウンのある MVC2 ページのバグを修正しようとしています。私の問題は、フォームを送信した後、モデルサーバー側でドロップダウンの値を変更しましたが、ビューが再度レンダリングされたときに新しい値が選択されていないことです。
ビューでドロップダウンを次のように定義しました。
<%= Html.DropDownListFor(m => m.MyValueId, MyHelperClass.GetMyDropdown())%>
ドロップダウン リストを生成するヘルパー クラスがあります。関数は次のようになります。
public static List<SelectListItem> GetMyDropdown()
{
List<SelectListItem> options= new List<SelectListItem>();
options.Add(new SelectListItem { Text = "None", Value = string.Empty });
options.Add(new SelectListItem { Text = "MyValue", Value = "1" });
//and more options added in the same way
}
ビュー ページには、ユーザーがドロップダウンの値を再計算できる送信ボタンもあります。ユーザーがボタンをクリックすると、フォームが送信され、コントローラーのアクションは次のようになります。
[HttpPost]
public ActionResult MyViewName(MyModel model, string submitButton)
{
//check for my submit button value
if(submitButton == "Recalculate")
{
int newValue = 0;
//some logic to set the new value
model.MyValueId = newValue;
}
return View(model);
}
コードをデバッグすると、新しい値が作成され、モデルに適切に設定されていることがわかります。ドロップダウン生成メソッドで、リストが適切に作成され、新しい値のオプションが存在することがわかります。ビューでは、モデルがまだ正しい値を持っているものをデバッグして確認できますが、何らかの理由で、ドロップダウンが常に最初のオプションです - Text = "None" Value = "".
混乱を避けるためにコードをできるだけ単純化しようとしましたが、必要に応じてさらに詳しく説明します。なぜこれが起こっているのか誰にも分かりますか?