1

抱歉,这可能是一个新手问题,但假设我有一个自定义对象,我想通过一些操作将其传递给我的视图,所以我的代码将是

Private model db = new model();
Public Actionresult Index()
{
Return View(db);
}

但我也可以这样做

Public Actionresult Index()
{
db = new model();
Return View(db);
}

方法 1 只是惯例还是有任何原因?

4

2 回答 2

3

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

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());
}

Model1优势是没有实际意义的,因为即使Action2不需要模型,您也将创建您的模型。之所以如此,是因为Controllers 在 MVC 中没有被重用,它们总是被创建的。

编辑:要对此进行扩展,您需要知道每个请求的内容,在 Asp.Net 中,会创建一个新的控制器实例。这意味着,除非您的一个操作调用另一个方法,否则不会在控制器的同一个实例中调用两个方法。将模型放在私有字段中没有任何好处。在我的示例中,Index并且 Action1永远不会在HomeController. 这意味着即使您将其放在私有字段中,也会在两个不同的请求中为这两个操作创建一个新对象。

于 2013-07-05T19:21:50.307 回答
0

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

您可以进一步简化它:

Public ActionResult Index()
{
     Return View(new model());
}
于 2013-07-05T19:21:48.923 回答