我需要一些关于如何处理我创建的列表并使用Viewbag传递给我的视图的指示。如果POST中的模型出现问题,我需要创建并再次传递它,否则我会收到Razor语法的错误。
有没有更好的方法来做到这一点,以便我不必再次创建它(查询我的数据库)? 我猜Viewbag是不可能的,它只是一个快速修复。
// GET
public ActionResult Create()
{
Person person = new Person();
ViewBag.CountryList = Main.GetCountryList(); // for person.country string
return View(Person);
}
// POST
[HttpPost]
public ActionResult Create(Person person)
{
if (ModelState.IsValid)
{
...
}
ViewBag.CountryList = Main.GetCountryList();
return View(person);
}
HTML /剃须刀:
@Html.DropDownListFor(model => model.country, ViewBag.CountryList as SelectList)
答案 0 :(得分:1)
如果GetCountryList
是静态方法,您可以直接在Razor中使用它。
@Html.DropDownListFor(model => model.country, Main.GetCountryList() as SelectList)
如果要重复保存查询数据库,则应使用System.Web.HttpContext.Current.Cache
实现CoutryList数据的缓存,或者如果不改变则实现静态列表。
答案 1 :(得分:1)
除非您将该列表存储在会话或其他内容中,否则您需要重新查询以获取列表。
有了这个说,有几点需要考虑。对下拉列表的简单查询不应该是对服务器造成负担,以及实际上有多少次验证错误(10次中有1次)?通过客户端验证的组合并且每次都没有错误,这不应该使你的post方法经常被强制返回到视图。