我在这里读了很多关于下拉选择值问题的帖子(没有显示等等......)但我的是相反的问题。
我希望在按钮通过控制器操作提交页面后返回视图后,下拉内容始终会重置。那么我如何构建它可以工作,但是每次都可以重置下拉列表吗?我找不到办法做到这一点,我已经尝试了很多方法,相信我。
我的观点:
@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相关但是如何覆盖它以将下拉菜单重置为“请选择”每次?
提前致谢。
答案 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");
}
我希望这很清楚,如果您需要进一步的帮助,请告诉我。
马特