MVC3 DropDownListFor在回发操作中设置时,所选值不会更改

时间:2011-11-25 09:46:27

标签: asp.net-mvc-3 html.dropdownlistfor

我在这里读了很多关于下拉选择值问题的帖子(没有显示等等......)但我的是相反的问题。

我希望在按钮通过控制器操作提交页面后返回视图后,下拉内容始终会重置。那么我如何构建它可以工作,但是每次都可以重置下拉列表吗?我找不到办法做到这一点,我已经尝试了很多方法,相信我。

我的观点:

@Model.PspSourceModel.PayAccount.PaymentProviderId
<br />
@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.

从SO和更广泛的网络上的问题和答案我认为下拉列表似乎与您选择的ID相关但是如何覆盖它以将下拉菜单重置为“请选择”每次?

提前致谢。

2 个答案:

答案 0 :(得分:4)

这里的根本问题是,当MVC在回发时重新绑定表单时,它不使用Model而是使用ModelState,因此您可以根据需要更改模型,但只使用绑定的ModelState。你有没有在ModelState上尝试过这些方法?

 public bool Remove(string key);
 public void SetModelValue(string key, ValueProviderResult value);

答案 1 :(得分:0)

在您的回发操作中,您可以根据需要处理当前值,并在模型中设置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");
}

我希望这很清楚,如果您需要进一步的帮助,请告诉我。

马特