抱歉,这可能是一个新手问题,但假设我有一个自定义对象,我想通过一些操作将其传递给我的视图,所以我的代码将是
Private model db = new model();
Public Actionresult Index()
{
Return View(db);
}
但我也可以这样做
Public Actionresult Index()
{
db = new model();
Return View(db);
}
方法 1 只是惯例还是有任何原因?
抱歉,这可能是一个新手问题,但假设我有一个自定义对象,我想通过一些操作将其传递给我的视图,所以我的代码将是
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());
}
Model1
优势是没有实际意义的,因为即使Action2
不需要模型,您也将创建您的模型。之所以如此,是因为Controller
s 在 MVC 中没有被重用,它们总是被创建的。
编辑:要对此进行扩展,您需要知道每个请求的内容,在 Asp.Net 中,会创建一个新的控制器实例。这意味着,除非您的一个操作调用另一个方法,否则不会在控制器的同一个实例中调用两个方法。将模型放在私有字段中没有任何好处。在我的示例中,Index
并且 Action1
永远不会在HomeController
. 这意味着即使您将其放在私有字段中,也会在两个不同的请求中为这两个操作创建一个新对象。
示例中没有区别,任何一个版本都将返回对新模型的引用。
您可以进一步简化它:
Public ActionResult Index()
{
Return View(new model());
}