我有一个带有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());
但结果是一样的
答案 0 :(得分:0)
我不知道它是否是正确的方法,因为我不完全理解你尝试做什么,但是你的模型是null,因为你在创建控制器时将它初始化为null。你应该在向它添加东西之前做一个model = new TList()....
答案 1 :(得分:0)
您无法使用成员变量在控制器类中缓存值。 HTTP是无状态的,MVC 3遵循这种方法。每个单独调用一个action方法都会有一个全新的Controller类实例,模型设置为null。
首先,在两种操作方法中调用database.GetAll()
,然后提出问题“如何提高效率”。