ASP.NET MVC中使用AJAX传参技巧

1. 客户端使用Querystring传参

    一般情况下进行GET请求才会这么做,类似在浏览器的地址栏敲进去的url地址那样,客户端的js代码如下,这里对服务器端做了一个请求(这里用GET),请求通过url上的Querystring传了五个参数:

    下面是服务器端的代码,请注意这个Action(方法)是有参数的,直接接受传客户端传过来的参数

客户端调用AjaxGet方法,得到的结果如下:

2. 客户端使用使用Json传参

    使用第一种方法传参的话代码看起来比较简洁,只需要对url进行赋值就行,但是如果参数多的话…会乱,所以一般推荐用data属性传参,以下是使用json对data属性进行赋值传参,和第一种方法一样也是传那五个参数,这次用POST:

    不管是开发还是维护,我们都比较希望看到的是上面这种写法,服务器端的代码不变,当然得到的结果也是一样了(哦不…请求方式变为POST了)

2.5 服务器端使用对象接受参数

    上面两种方法有个问题未能解决,那就是服务器端Action方法中的变量多起来也是件麻烦事,ASP.NET MVC框架考虑到这点,我们可以定义一个类,如下:

    端的代码修改如下,传参的变化将不会对Action方法的参数有影响:

3. 客户端使用数组传参

    有些时候Ajax请求的参数很复杂,服务器端Action方法的参数可能是一个包含其他对象或者数组的对象,例如2.5中的Option可能是这样定义的:

    问题出现了,客户端还可以用json传参么,我试过是不可以的(也许是我使用的jquery版本或者asp.net mvc版本支持不够好??),但可以采用以下方法:

    用数组对data赋值,这里数组的写法有点讲究,就是每个item都是一个json,两个属性分别是name和value,作用就无需解释啦。

服务器端的代码小改一下,如下:

客户端调用AhaxPostWithArray方法,得到的结果如下:

 本人在实际项目中,使用到的前后端传参数技巧:

前端:

SysModel是Javascript中的一个自定义对象 

var jsonText = JSON.stringify(SysModel);

$.ajax({
    type: "POST",
    url: "{0}/SR/GetPublishInfoFromWeb".format(appRootPath),
    processData: true,
    data: { jsonText: jsonText },
    success: function (json) {
         //do something
        } 
}); 

后台接收:

SystemModel s = JsonConvert.DeserializeObject<SystemModel>(jsonText);

 另一种方式:

 前端:

$.getJSON("{0}/SR/PublishPrepare".format(appRootPath), { PID: PlanID }, function (json) {
     PublishProcessing();
   }
);

后台:

public ActionResult PublishPrepare(Guid PID)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学自动化测试

pytest文档2-用例运行规则

1.查看pytest命令行参数,可以用pytest -h 或pytest —help查看

24230
来自专栏深度学习之tensorflow实战篇

python如何保存矩阵,保存matrix,保存numpy.ndarray

问题:如何将array保存到txt文件中?如何将存到txt文件中的数据读出为ndarray类型?python如何保存矩阵,保存matrix,保存numpy.nd...

3.1K60
来自专栏C#

C#创建安全的栈(Stack)存储结构

    在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在...

22260
来自专栏JavaQ

Java多线程编程笔记之Condition

本篇内容基于JDK7,涉及Condition常用方法。 1.概述 Condition接口位于java.util.concurrent.locks包下,实现类有 ...

27850
来自专栏Java成长之路

深入理解多线程

多线程是java中比较重要的一部分内容,使用多线程有许多的优点: - 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。 - 程序需要实现一些需...

22030
来自专栏程序员互动联盟

【编程基础】你是否真的了解main()函数?

最近看到很多人、甚至市面上的一些书籍,都使用了void main() ,其实这是错误的。C/C++中从来没有定义过void main() 。C++之父 Bjar...

33460
来自专栏流柯技术学院

Loadrunner中web_find和web_reg_find函数的使用与区别

总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find();这两个函数均用于内容的查找,但两者也有本质的区...

22420
来自专栏杂七杂八

列表、字典、集合中筛选数据

传统迭代法 data = [1,5,-3,-2,8,0,9] res = [] for x in data: if x >=0: res...

38660
来自专栏JetpropelledSnake

Python面试题之Python反射详解

解释Python的反射,先提一个简单的需求,现在我有一个简易的网站,由两个文件组成,一个是具体执行操作的commons.py文件,一个是入口文件index.py...

12820
来自专栏电光石火

关于PHP字符编码的函数区别

在以前的学习当中,比方说有一次的写采集过程中转换字符的编码的时候老是失败,转换的结果总没有完全输出,后来经过网络查询得知是iconv有一个“-”漏洞,所以我们有...

26080

扫码关注云+社区

领取腾讯云代金券