MVC3 DropDownListForポストバックアクションで設定した場合、選択した値は変更されません

私はドロップダウンに関する選択された価値の問題(等を表示していないなど)について多くの記事を読んだが、私の反対の問題である。

ボタンがコントローラアクションを介してページを送信した後にビューが返された後に、ドロップダウンを常にリセットするようにします。だから私はそれをすべて構造化しましたが、毎回ドロップダウンリストをリセットすることは可能ですか?私はそれを行う方法を見つけることができないと私は多くの方法を試してみました、私を信じてください。

私の見解:

@Model.PspSourceModel.PayAccount.PaymentProviderId

@Html.DropDownListFor( x => x.PspSourceModel.PayAccount.PaymentProviderId, new SelectList(Model.PspSourceModel.PaymentProviders, "Value", "Text", "-- please select --"), "-- please select --"

私のコントローラ:

// I've tried forcing the selected value id here - doesn't effect the dropdownlist still?
pspVM.PspSourceModel.PayAccount.PaymentProviderId = 1;

return (View(pspVM));

マイウェブページに表示されます:

1 (the id I set in the Action)

dropdownlist with the id=6 or whatever value was chosen prior to submitting the form.

あなたの選択したIDにドロップダウンリストが関連付けられているようだと思いますが、そのときにドロップダウンをリセットして毎回「選択してください」というようにするにはどうすればよいですか?

前もって感謝します。

1
ちょうどそれを行う方法を見つけたが、より良い提案をするために開いている? //最初にクリアして、存在しないId(-1)に設定すると、デフォルトで 'My Controller: code ModelState.Clear();を選択してください。 pspVM.PspSourceModel.PayAccount.PaymentProviderId = -1; return(View(pspVM)); code とにかくありがとうございました。
追加された 著者 BarryFanta,

2 答え

ここでの基本的な問題は、MVCがポストバック時にフォームを再バインドしているときにModelを使用せずModelStateを使用するため、モデルを好きなだけ変更できますが、バインドされたModelStateだけが使用されることです。 ModelStateでこれらのメソッドのいずれかを試しましたか?

 public bool Remove(string key);
 public void SetModelValue(string key, ValueProviderResult value);
4
追加された

あなたのポストバックに対するアクションでは、必要に応じて現在の値を処理し、モデル内のIDを設定してビューを呼び出すことができます。

[HttpPost]
public ActionResult Index(ModelClass viewModel)
{
 //Process Value

  viewModel.PspSourceModel.PayAccount.PaymentProviderId = 6;
  return View("Index", viewModel);
}

あるいは、あなたのHttpGetにデフォルト値を設定して、あなたの投稿のRedirectToAction結果を呼び出すことができます。

[HttpGet]
public ActionResult Index()
{
 //Set the default values; the following is a rough example, and won't work.
  var viewModel = new ModelClass
  {
    PspSourceModel.PayAccount.PaymentProviderId = 6
  }

  return View("Index", viewModel);
}

[HttpPost]
public ActionResult Index(ModelClass viewModel)
{
 //Process Value

  return RedirectToAction("Index");
}

私はこれがはっきりしていることを願っています。さらなる支援が必要な場合は、教えてください。

マット

0
追加された
ありがとうマット、あなたのHTTPostの提案はまさに私がやっていたものでした。どういうわけかそこにIDを設定しても問題は解決しません。私はあなたのリダイレクトソリューションをやり遂げることができません。私は他のものがそこに進んでいるので、それを避けるためのロジックは面倒です。私の最初のコメントによると ModelState の問題だと思われます。とにかくありがとう
追加された 著者 BarryFanta,