当使用后退按钮并重新提交表单时,我遇到问题,绑定到下拉列表的模型上的值不会保留在第二次提交中。问题后退按钮并重新提交表格
在现实生活中,此代码是一个报告生成器 - 表单从用户收集参数,然后将其张贴到显示数据的结果视图。显然,这是一个代码张贴一个相当复杂一点,但我下面有一些简单的代码表现出相同的错误:
我有像这样的模型:
public class HomeModel
{
public string SomeText { get; set; }
public long SelectedItemId { get; set; }
public IEnumerable<SelectListItem> AvailableItems { get; set; }
}
用于提交的一个实例的形式模型像这样:
@using(Html.BeginForm("Result", "Home", FormMethod.Get))
{
@Html.EditorFor(model => model.SomeText)
<br />
@Html.DropDownListFor(model => model.SelectedItemId, Model.AvailableItems)
<input type="submit" value="submit" />
}
这显示了详细的图,像这样
You Typed: @Html.DisplayFor(model => model.SomeText) <br />
You Selected: @Html.DisplayFor(model => model.SelectedItemId)
和一个控制器来管理这一切:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
HomeModel model = new HomeModel();
List<SelectListItem> items = new List<SelectListItem>();
for (int i = 0; i < 10; i++)
items.Add(new SelectListItem() { Value = i.ToString(), Text = i.ToString() });
model.AvailableItems = items;
return View(model);
}
public ActionResult Result(HomeModel model)
{
return View(model);
}
}
我填写表格,按提交。我被重定向到结果视图,一切都很好。
然后我在浏览器中按回来,然后再次显示索引视图。
然后我再次提交表单,事情就变得很糟糕。尽管列表中显示的列表显示浏览器中先前选择的值,但该模型不会从我的列表中重新填充选定的值。
字符串属性被正确更新,并且在我显示此行为的真实世界代码中是这样。
这只是发生在IE浏览器,我使用的版本9
你是如何设置html表单的,你可以与表单分享代码吗 –
我已经添加了表单顶部的部分,我已经省略了大部分,因为它更复杂底部 – CurlyPaul