对于HttpPost Edit操作方法,哪种重载最有效?
[HttpPost] public ActionResult Edit(int id, FormCollection collection)
[HttpPost] public ActionResult Edit(OurDomainDataModel obj)
使用OurDomainDataModel
[HttpPost]
public ActionResult Create(Movie m)
{
if (ModelState.IsValid)
{
db.Movies.Add(m);
db.SaveChanges();
return RedirectToAction("Index");
}
else
return View(m);
}
使用FormCollection
[HttpPost]
public ActionResult Create(FormCollection collection)
{
Movie movie = new Movie();
if (TryUpdateModel(movie))
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
else
return View(movie);
}
哪一个被推荐为最佳做法?
答案 0 :(得分:4)
第一个没有创建和填充OurDomainDataModel实例的开销,但我不认为这会对性能产生很大影响。
请记住,过早优化是所有邪恶的根源。
答案 1 :(得分:3)
如果有效率意味着更快,那么我猜测(没有测试)使用FormCollection
会更快,因为它没有使用模型绑定的开销。
然而此结果可以忽略不计,因此使用FormCollection
将是过早优化。 MVC采用集成模型绑定设计,如果遇到性能问题,我敢打赌它在其他地方。
现在,如果你的开发时间意味着高效,那么这完全取决于项目和开发人员。
如果表单只发布了一些简单的值,那么使用FromCollection
编码可能比创建模型更快。 然而如果是这种情况,那么使用参数会更快,你会输入值。 ActionResult Edit(int id, string name, bool someOtherValue)
。虽然,如果您在任何项目中使用这些方法中的任何一种,但您很快就会发现需要创建模型。因此,最初快速编写代码将需要更多的开发时间来重构和维护。
如果您已经定义了OurDomainDataModel
模型,那么传递代码的速度会快得多。
如果您真正想问的是
“什么是更优雅,可维护,可测试的代码,将获得其他任何必须使用它的人的尊重?”
然后答案是传递模型或ViewModel
答案 2 :(得分:1)
使用FormCollection
编写所有代码比使用ASP.NET MVC提供的内置功能更快,具体取决于您是多么优秀的程序员,以及映射层的效率如何。
然而,当表现并不重要时;只需使用
,您就可以节省很多宝贵的时间ActionResult Edit(Model model);
语法。
我们的250万美元综合浏览量/月MVC网站使用MVC活页夹时效果很好。