让asp.net mvc的Action支持jQuery直接提交的javascript对象

来源:未知 责任编辑:责任编辑 发表时间:2014-05-26 11:00 点击:

在某些ajax应用中,我们可能会用到如下的场景:
 $.post('/Test/PostTest', { values: [1, 2, 3, 4] }, function(result){
    //TODO:
}, 'json' );
我们希望提交一个数组给服务器。
于是我们创建了一个如下的Controller,来负责处理上面的ajax请求:
public class TestController : Controller
{
    [HttpPost]
    public JsonResult PostTest( int[] values )
    {
        //TODO:
        return Json( new { success = true });
    }
}
可是当我们充满期待的去测试我们刚才的代码时,却发现了一个问题。



 
值并没有被正确的传过来。
于是我们打开了浏览器的开发人员工具,来看看到底jQuery提交了什么内容给我们的服务器。

我们发现,表单名称被设置成为了values[],而不是values。莫非是是mvc不能将values[]看成一个数组并自动转化么?

于是我们打开ILSpy,找到了System.Web.Mvc.FormValueProviderFactory的源代码,并将它复制出来,作了一些扩展,以支持我们想要的功能。
 public sealed class FormValueProviderFactoryEx 
    : ValueProviderFactory
{
    private readonly UnvalidatedRequestValuesAccessor _unvalidatedValuesAccessor;
    public FormValueProviderFactoryEx()
        : this(null)
    {
 
    }
    internal FormValueProviderFactoryEx(UnvalidatedRequestValuesAccessor unvalidatedValuesAccessor)
    {
        if (unvalidatedValuesAccessor == null)
        {
            unvalidatedValuesAccessor = ((ControllerContext cc) => new UnvalidatedRequestValuesWrapper(cc.HttpContext.Request.Unvalidated()));
        }
        this._unvalidatedValuesAccessor = unvalidatedValuesAccessor;
    }
    public override IValueProvider GetValueProvider(ControllerContext controllerContext)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }
        return new FormValueProviderEx(controllerContext, this._unvalidatedValuesAccessor(controllerContext));
    }
}
下面这几个是原来的FormValueProviderFactory用到的,但在System.Web.Mvc.dll中被声明为internal,所以不得已复制了出来。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • C#高级编程:数据库连接[1]
  • asp.net 设置GridView的选中行的实现代码
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET GridView列表代码示例
  • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1