作为ASP.NET MVC的新手,我一直想知道Controller方法的签名.在我看过的所有示例中,它们似乎总是返回ActionResult,即使它们实际返回ViewResult实例或类似实例.
这是一个常见的例子:
public ActionResult Index()
{
return this.View();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将方法声明为public ViewResult Index()并获得更强的类型支持是不是更有意义?
实验表明这是有效的,所以似乎有可能.
我确实意识到可能存在需要多态的情况(例如,如果你只想在某些情况下重定向,但在其他情况下显示视图),但如果方法总是返回一个视图,我会发现更多的ViewResult可取的.
就未来的兼容性而言,ActionResult显然提供了更强大的签名,但如果有人控制整个代码库,则总是可以将方法的签名更改为更通用的返回类型(如果将来需要它).
是否有其他我不了解的注意事项,或者我应该继续并使用特定的返回类型声明我的控制器方法?
我一直无法找到关于这个问题的具体答案.我已经查看了这个问题以及其他地方的帖子和后续帖子,但我真正读到的只是JsonResult有一个硬编码的内容类型,并且确实没有任何性能提升.
如果两个结果都可以返回Json,为什么需要在ActionResult上使用JsonResult.
public ActionResult()
{
return Json(foo)
}
public JsonResult()
{
return Json(bar)
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释ActionResult无法完成工作并且必须使用JsonResult的情况.如果没有,为什么JsonResult首先存在.
我在尝试使用RedirectToAction时收到此错误,任何人都可以提供有关为什么会发生这种情况的任何建议,我之前使用过这个没有任何问题,我一定是缺少一些东西.
无法将类型'System.Web.Mvc.RedirectToRouteResult'隐式转换为'System.Web.Mvc.ViewResult'
[HttpPost]
public ViewResult Edit(Customer customer)
{
if (ModelState.IsValid)
{
customersRepository.SaveCustomer(customer);
TempData["message"] = customer.CustomerName + " has been saved.";
return RedirectToAction("Index");
}
else //validation error, so redisplay the same view
return View(customer);
}
Run Code Online (Sandbox Code Playgroud)
问候
利亚姆
如何决定是使用ActionResult还是ViewResult?我知道ActionResult是一个以ViewResult作为子类型的抽象类,但我已经看到了将这两个用于相同功能的示例.它们之间有什么区别吗?
MVC项目有什么区别
PartialViewResult
ActionResult
ViewResult
班?
谁能发帖简介?
asp.net-mvc ×4
actionresult ×1
asp.net ×1
c# ×1
json ×1
polymorphism ×1
return-value ×1
viewresult ×1