在MVC控制器中使用私有模型的原因是什么
本文关键字:模型 是什么 控制器 MVC | 更新日期: 2023-09-27 18:21:08
很抱歉,这可能是一个新手问题,但假设我有一个自定义对象,我想通过一些操作将其传递给我的视图,所以我的代码将是
Private model db = new model();
Public Actionresult Index()
{
Return View(db);
}
但我也可以做这个
Public Actionresult Index()
{
db = new model();
Return View(db);
}
方法1只是惯例还是有任何原因?
正如我在评论中所说,第一个方法几乎没有使用。假设你有这个控制器:
public class HomeController
{
public ActionResult Index()
{
return View(new Model1());
}
public ActionResult Action1()
{
return View(new Model1());
}
}
然后,在私有字段中移动new Model1()
将消除每个操作中创建的冗余。
public class HomeController
{
private Model1 model = new Model1();
public ActionResult Index()
{
return View(model);
}
public ActionResult Action1()
{
return View(model);
}
}
然而,如果你引入这种方法:
public ActionResult Action2()
{
return View(new Model2());
}
这种优势是没有意义的,因为即使Action2
不需要模型,您也将创建Model1
。之所以会出现这种情况,是因为Controller
在MVC中没有被重用,它们总是被创建的。
编辑:要对此进行扩展,您需要知道在Asp.Net中,每个请求都会创建一个新的控制器实例。这意味着,除非您的一个操作调用另一个方法,否则不会在控制器的同一实例中调用两个方法。把这种模式放在私人领域是没有好处的。在我的示例中,Index
和Action1
永远不会在HomeController
的同一实例中调用。这意味着,即使您将它放在一个私有字段中,也会在两个不同的请求中为这两个操作创建一个新对象。
示例中没有区别,任何一个版本都将返回对新模型的引用。
你可以进一步简化它:
Public ActionResult Index()
{
Return View(new model());
}