我是否需要为get / post ActionResult创建相同的列表?

时间:2014-12-05 14:58:03

标签: c# asp.net-mvc razor

我需要一些关于如何处理我创建的列表并使用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)

2 个答案:

答案 0 :(得分:1)

如果GetCountryList是静态方法,您可以直接在Razor中使用它。

@Html.DropDownListFor(model => model.country, Main.GetCountryList() as SelectList)

如果要重复保存查询数据库,则应使用System.Web.HttpContext.Current.Cache实现CoutryList数据的缓存,或者如果不改变则实现静态列表。

答案 1 :(得分:1)

除非您将该列表存储在会话或其他内容中,否则您需要重新查询以获取列表。

有了这个说,有几点需要考虑。对下拉列表的简单查询不应该是对服务器造成负担,以及实际上有多少次验证错误(10次中有1次)?通过客户端验证的组合并且每次都没有错误,这不应该使你的post方法经常被强制返回到视图。