CSh*_*per 22 c# asp.net-mvc json return-value asp.net-mvc-4
我一直无法找到关于这个问题的具体答案.我已经查看了这个问题以及其他地方的帖子和后续帖子,但我真正读到的只是JsonResult有一个硬编码的内容类型,并且确实没有任何性能提升.
如果两个结果都可以返回Json,为什么需要在ActionResult上使用JsonResult.
public ActionResult()
{
return Json(foo)
}
public JsonResult()
{
return Json(bar)
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释ActionResult无法完成工作并且必须使用JsonResult的情况.如果没有,为什么JsonResult首先存在.
Ily*_*kin 18
当使用
JsonResult
过ActionResult
我通常会返回具体的结果(例如JsonResult
,ViewResult
),并有我的优点:
PartialViewResult
和ViewResult
作为结果类型时,使用部分或共享视图会更容易.人们支持这种方法有一些链接:
Pro ASP.NET MVC 3框架引用了一句话:
注意请注意,列表中action方法的返回类型是
ViewResult
.如果我们指定了更通用的ActionResult
类型,那么该方法也可以编译和工作.事实上,一些MVC程序员会将每个动作方法的结果定义为ActionResult
,即使他们知道它总会返回一个更具体的类型.我们在下面的示例中特别勤奋地阐述了如何使用每种结果类型,但我们在实际项目中往往更加放松.
ActionResult
只有当一个动作应该返回不同类型的结果时,我才会使用具体的一个.但这不是常见的情况.
我还想添加ActionResult
一个抽象类,这样你就不能简单地创建这种类型的实例并返回它.JsonResult
具体是因为您可以创建其实例并从操作方法返回.还有许多其他类型派生自ActionResult
并且基本上所有这些类型都用于覆盖ExecuteResult
方法.
public abstract class ActionResult
{
public abstract void ExecuteResult(ControllerContext context);
}
Run Code Online (Sandbox Code Playgroud)
此方法由ControllerActionInvoker
逻辑写入response
对象并实现逻辑.
ControllerActionInvoker
不知道具体的结果,以便它可以处理从派生ActionResult
和实现的任何结果ExecuteResult
.
在这两种情况下,您都会JsonResult
在示例中返回一个类型实例,Json(model)
它只是一个创建实例的工厂方法JsonResult
.
还有另一个问题是,方法的数据类型是否尽可能具体或更一般?讨论了方法参数和返回值的最佳实践.
一般的想法是提供抽象类型作为参数,以便您的方法可以处理更广泛的参数; 返回足够多的类型,以便客户不需要转换或转换它们.
归档时间: |
|
查看次数: |
19105 次 |
最近记录: |