ViewResult()
和ActionResult()
ASP.NET MVC有什么区别?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud) 作为ASP.NET MVC的新手,我一直想知道Controller方法的签名.在我看过的所有示例中,它们似乎总是返回ActionResult,即使它们实际返回ViewResult实例或类似实例.
这是一个常见的例子:
public ActionResult Index()
{
return this.View();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将方法声明为public ViewResult Index()
并获得更强的类型支持是不是更有意义?
实验表明这是有效的,所以似乎有可能.
我确实意识到可能存在需要多态的情况(例如,如果你只想在某些情况下重定向,但在其他情况下显示视图),但如果方法总是返回一个视图,我会发现更多的ViewResult可取的.
就未来的兼容性而言,ActionResult显然提供了更强大的签名,但如果有人控制整个代码库,则总是可以将方法的签名更改为更通用的返回类型(如果将来需要它).
是否有其他我不了解的注意事项,或者我应该继续并使用特定的返回类型声明我的控制器方法?
我有两个问题:
JSONResult和ActionResult有什么区别?
何时在MVC中使用JSONResult?
asp.net-mvc jsonresult asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5
我有一个观点.当用户点击我视图中的按钮时,我试图从我的视图中获取一些数据,而不通过AJAX POST重新加载我的视图来显示一些数据.
这是我的控制器中的方法:
[HttpPost]
public JsonResult GetUserTraj()
{
var userTrajList =
DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
return Json(userTrajList);
}
Run Code Online (Sandbox Code Playgroud)
这将返回Json结果.我正在尝试实现会话.因此,如果会话已过期,我希望将用户重定向到"登录"视图.在上述情况下,如果会话过期Session["UserName"]
变为null并引发异常.
[HttpPost]
public JsonResult GetUserTraj()
{
if (Session["UserName"] != null)
{
var userTrajList =
DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
return Json(userTrajList);
}
else
{
RedirectToAction("Login", "Login");
return Json(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的代码.但它不起作用.它不会将用户重定向到"登录"视图.我试过了return RedirectToAction("Login", "Login");
.但这不起作用,因为控制器动作方法不能返回其他内容JsonResult
.请帮我找到相同的解决方案.