让ASP.NET MVC的Controller输出不同类型数据
2010-05-30 13:58
288 查看
ASP.NET MVC中,可以通过返回不同类型的ActionResult来输出不同内容,比如ViewResult会输出视图页,JsonResult会输出Json数据等等。
而有时会遇到同一个Controller需要支持输出不同类型的情况,比如正常查看一个用户的资料页时, 用/User/{id}就可以访问到;而在JavaScript或其它系统中需要查看用户资料,又希望/User/{id}能返回Json数据。 这种情况可以通过构建一个自定义ActionResult来实现,根据参数返回默认的ViewResult,或者将Model序列化为指定的类型输出,其实就是控制Model的输出行为。输出类型的参数,可以通过两种方式来传递,一个种传统的Get或Post传参:/User/{id}?rtype=json;另一种可以通过Http请求的ContentType参数来指定类型:request.ContentType = “json”.
附参考代码:
而有时会遇到同一个Controller需要支持输出不同类型的情况,比如正常查看一个用户的资料页时, 用/User/{id}就可以访问到;而在JavaScript或其它系统中需要查看用户资料,又希望/User/{id}能返回Json数据。 这种情况可以通过构建一个自定义ActionResult来实现,根据参数返回默认的ViewResult,或者将Model序列化为指定的类型输出,其实就是控制Model的输出行为。输出类型的参数,可以通过两种方式来传递,一个种传统的Get或Post传参:/User/{id}?rtype=json;另一种可以通过Http请求的ContentType参数来指定类型:request.ContentType = “json”.
附参考代码:
public class AutoResult : ActionResult { public string ViewName { get; set; } public object Model { get; set; } public override void ExecuteResult(ControllerContext context) { string type = context.HttpContext.Request["rtype"]; if (string.IsNullOrEmpty(type)) { type = context.HttpContext.Request.ContentType; } if (!string.IsNullOrEmpty(type)) { switch (type.ToLower()) { case "json": new NJsonResult(Model).ExecuteResult(context); break; case "binary": new BinaryResult(Model).ExecuteResult(context); break; case "xml": new XmlResult(Model).ExecuteResult(context); break; default: context.HttpContext.Response.Output.Write("无法识别的类型"); break; } } else { context.Controller.ViewData.Model = Model; ViewResult viewResult = new ViewResult() { ViewName = ViewName, ViewData = context.Controller.ViewData }; viewResult.ExecuteResult(context); } } }
相关文章推荐
- ASP.NET MVC Action的参数名与参数类型不同,导致取不到Request数据
- ASP.NET MVC中将数据从Controller传递到视图
- 让ASP.NET MVC页面返回不同类型的内容
- Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据
- ASP.NET MVC中Controller与View之间的数据传递
- (转)ASP.NET MVC中Controller与View之间的数据传递总结
- ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
- 在ASP.NET MVC的Controller Action中获取客户端请求数据
- 用JS解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- Asp.net mvc中controller与view间的如何传递数据
- ASP.NET MVC中Controller与View之间的数据传递总结
- [转载]Asp.net MVC中Controller返回值类型
- ASP.NET MVC View向Controller提交数据
- ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
- ASP.NET MVC中 Jquery AJAX 获取数据利用MVC模型绑定实现输出
- Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
- ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
- 在 ASP.NET MVC Web 应用程序中输出 RSS格式数据
- asp.net mvc 如何将controller 里一个action 返回值为list<>的值输出到view