在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只是惯例还是有任何原因?

在MVC控制器中使用私有模型的原因是什么

正如我在评论中所说,第一个方法几乎没有使用。假设你有这个控制器:

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中,每个请求都会创建一个新的控制器实例。这意味着,除非您的一个操作调用另一个方法,否则不会在控制器的同一实例中调用两个方法。把这种模式放在私人领域是没有好处的。在我的示例中,IndexAction1永远不会在HomeController的同一实例中调用。这意味着,即使您将它放在一个私有字段中,也会在两个不同的请求中为这两个操作创建一个新对象。

示例中没有区别,任何一个版本都将返回对新模型的引用。

你可以进一步简化它:

Public ActionResult Index()
{
     Return View(new model());
}