[ASP.NET MVC 3.0]JsonValueProviderFactory讓Action接收Json更輕鬆
2012-03-11 11:38
274 查看
![](http://pic002.cnblogs.com/images/2012/63419/2012031111364227.png)
我想在大量Ajax的網站中,一定時常以Json做為資料傳遞,但預設的情況下,Json的資料不會對應到參數,必需寫程式做額外的轉化,有點麻煩,而且也限制了參數的格式,但MVC 3增加JsonValueProviderFactory解決了這問題。
以前在MVC2.0我只知道這樣寫,既麻煩又限制了Action的使用
public class Member { public string Id { get; set; } public string Name { get; set; } public Member Leader { get; set; } } public class HomeController : Controller { public ActionResult Index(string json) { //必需還要自己寫程式轉換,麻煩又限制傳遞的格式 Member member = JsonConvert.DeserializeObject<Member>(json); return View(); } }
現在我會寫成如下,很乾淨也不綁任何格式,可以用Form或QueryString或Json來傳遞參數。
public ActionResult Index(Member member) { //參數就是我想要的Class return View(); }
註:早在MVC 2.0就有參數的對應如 <input name=”Id”/> <input name=”Name”/>,Submit後就會自動對應到Member Class下的Property,但那時不支援Json格式。
判斷轉換參數格式,Json是使用Request的ContentType必需設成"application/json"才會執行剖析,而其他Form或QueryString就是看Url與Content。
Json與Form格式的使用範例,只有差在contentType: 'application/json'
$.ajax({ url: url, type: 'POST', data: $.toJSON({ Id: 1, Name: "Wade", Leader: { Id: 2, Name: "SuperWade", Leader: { Id: 3, Name: "GodWade"}} }), contentType: 'application/json' }); //Form $.ajax({ url: url, type: 'POST', data: "Id=1&Name=Wade", });
範例中不管是用Json或Form,Action都可以正確的接到參數,但是Json有時會比其他ValueProvider更方便,有看到範例中Json內容有階層性,我完全想不出其他ValueProvider要如何做到同樣的事。
![](http://pic002.cnblogs.com/images/2012/63419/2012031111351739.png)
擴充轉換格式
Action參數的轉換是由ValueProviderFactory來處理,如果想增加轉換格式可以繼承System.Web.Mvc.ValueProviderFactory,如增加參數支援Xml的轉換。
public class XmlValueProviderFactory : ValueProviderFactory { //內容撰寫請參考MVC的Source Code } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); //通常在Gloab.asax中增加 ValueProviderFactories.Factories.Add(new XmlValueProviderFactory()); }
此方法也適用在MVC 2.0,想在MVC 2.0使用Json轉換,可以下載MVC 3.0的Source Code,在專案中加入JsonValueProviderFactory。
相关文章推荐
- [ASP.NET MVC 3.0]JsonValueProviderFactory讓Action接收Json更輕鬆
- Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
- Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理
- asp.net MVC接收前端传递的复杂json对象的简单处理方法
- Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
- 我要学ASP.NET MVC 3.0(十六): MVC 3.0 实例系列之表格数据的分页
- Asp.Net MVC 2.0--3.0基础视频资料
- ASP.NET MVC 3 JSON 返回时间格式处理
- 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult
- ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件
- 自定义ASP.NET MVC JsonResult序列化结果
- ASP.NET MVC的Controller接收输入详解
- ASP.NET MVC 3.0 高级编程
- [备忘]ASP.NET MVC 3.0+ 中“_ViewStart.cshtml”文件的作用
- ASP.NET MVC中的Json Binding和Validate
- ASP.NET Webform或者ASP.NET MVC站点部署到IIS下,默认情况下.json文件是不能被访问的,如果请求访问.json文件,则会出现找不到文件的404错误提示
- 我要学ASP.NET MVC 3.0(十): MVC 3.0 使用 Forms身份验证
- ASP.NET MVC AJAX实现 以及如何处理json数据,简介
- Log4Net异常日志记录在asp.net mvc3.0的应用