如何减少对我的数据库的请求?

时间:2011-09-11 17:29:24

标签: database asp.net-mvc-3 razor

我有一个带有gridview的局部视图。所以当用户点击添加按钮请求时会重定向到unitsController的Add方法。将其添加到数据库后,我应该从数据库中重新获取所有数据。有没有办法阻止控制器获取所有数据库记录?

以下是我当前的控制器

public class UnitsController : Controller
{
    TList<Units> model=null;

    public ActionResult UnitsPartial()
    {
        if(model==null)
          model = database.GetAll();
        return PartialView(model);
    }

    [HttpPost]
    public ActionResult Add(Units unit)
    {
        if (ModelState.IsValid)
        {
            database.Save(unit);
            model.Add(unit);          
        }

        return PartialView("UnitsPartial", model);
    }

在最后一行中,我想使用return PartialView("UnitsPartial", model)而不是return database.GetAll()来阻止数据库查询。但Add方法中的模型为空 我的方法是否正确?为什么add()方法中的model为null? --UPDATED
首先控制重定向到UnitsPartial()并正确填充模型对象。按下添加按钮后,控件将重定向到Add(...)方法,但这个时间模型等于null! 它有什么问题?我试图将model.Clone()传递给局部视图
return PartialView("UnitsPartial", model.Clone());
但结果是一样的

2 个答案:

答案 0 :(得分:0)

我不知道它是否是正确的方法,因为我不完全理解你尝试做什么,但是你的模型是null,因为你在创建控制器时将它初始化为null。你应该在向它添加东西之前做一个model = new TList()....

答案 1 :(得分:0)

您无法使用成员变量在控制器类中缓存值。 HTTP是无状态的,MVC 3遵循这种方法。每个单独调用一个action方法都会有一个全新的Controller类实例,模型设置为null。

首先,在两种操作方法中调用database.GetAll(),然后提出问题“如何提高效率”。