mvc初学controller参数传递感想
2015-08-13 17:28
260 查看
从视图中传递参数给controller也有很多种方式
方法一(推荐):
路由
控制器
视图
优点:参数直接在url中写入,不用定制多个路由规则,一个路由规则就可以实现多种格式的请求
注意:在web api中post请求的参数要用[FromBody]或者[FromUri]修饰,这时候不能用这个方法传参数
,因为[FromBody]传参的规则与普通的不一样,不是key=value的格式,直接是=value
路由规则不用修改
控制器post方法
视图
不过以data的方式传参最好限定于post请求,因为在put和delete中会出错(不知道有没有人能实现)
还有一个更好的解决方法就是用[FromUri]来修饰post方法的参数,这时候参数的传递可以和普通参数
的传递方式一样
方法二(不推荐):
控制器
视图
缺点:这种方式要根据控制器中方法的参数的不用,制定不同的路由规则,然后写相应的url,跟方法
一的不同之处就是路由规则还有url的写法,
其他:
就是前面说的以data方式传参,不推荐,因为put和delete会出错,而且data格式不一样的时候可能还
要设置dataType和contenttype等格式
方法一(推荐):
路由
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}", defaults: new { id = RouteParameter.Optional } );
控制器
public string Get() { return "web api,get by id and value"; } public string Get(int id,string value) { return "web api,get by id and value"; }
视图
$.ajax({ type: 'get', url: 'api/values/get', success: function (data) { alert(data); }, error: function () { setContainer('ERROR!'); } }); $.ajax({ type: 'get', url: 'api/values/get?id=12&value=1234', success: function (data) { alert(data); }, error: function () { setContainer('ERROR!'); } });
优点:参数直接在url中写入,不用定制多个路由规则,一个路由规则就可以实现多种格式的请求
注意:在web api中post请求的参数要用[FromBody]或者[FromUri]修饰,这时候不能用这个方法传参数
,因为[FromBody]传参的规则与普通的不一样,不是key=value的格式,直接是=value
路由规则不用修改
控制器post方法
public string Post([FromBody]string value) { return "web api,post by value"; }
视图
$.ajax({ type: 'post', url: 'api/values/post', dataType: 'json', //在data为json格式时,这句必须加上 data: { "": "meterid" }, contenttype: 'application/json', success: function (data) { alert(data); }, error: function () { setContainer('ERROR!'); } });
不过以data的方式传参最好限定于post请求,因为在put和delete中会出错(不知道有没有人能实现)
还有一个更好的解决方法就是用[FromUri]来修饰post方法的参数,这时候参数的传递可以和普通参数
的传递方式一样
方法二(不推荐):
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}", defaults: new { id = RouteParameter.Optional } );
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}/{value}",
defaults: new { id = RouteParameter.Optional }
);
控制器
public string Get() { return "web api,get by id and value"; } public string Get(int id,string value) { return "web api,get by id and value"; }
视图
$.ajax({ type: 'get', url: 'api/values/get', success: function (data) { alert(data); }, error: function () { setContainer('ERROR!'); } }); $.ajax({ type: 'get', url: 'api/values/get/12/1234', success: function (data) { alert(data); }, error: function () { setContainer('ERROR!'); } });
缺点:这种方式要根据控制器中方法的参数的不用,制定不同的路由规则,然后写相应的url,跟方法
一的不同之处就是路由规则还有url的写法,
其他:
就是前面说的以data方式传参,不推荐,因为put和delete会出错,而且data格式不一样的时候可能还
要设置dataType和contenttype等格式
相关文章推荐
- 使用isinstance()来判断一个对象的类型
- postgresql 查数据库总大小(占用磁盘空间)
- NOIP2012 同余方程 题解
- SOAPUI 断言设置之二
- hdu 1316 How Many Fibs?
- NB多项式模型、神经网络、SVM初步—斯坦福ML公开课笔记6
- CSS3选择器学习笔记
- ubuntu安装ulipad
- 邓小平文选第三卷辅导讲座
- 调用百度语音SDK,简单的语音识别控件
- 关于无线PCB中 中50欧姆的特性阻抗的注意事项
- android 图片上传,使用 httpclient 的MultipartEntity 上传
- CMD命令不能运行
- Linux Ubuntu 环境变量修改及生效方法
- IOS BLE4.0蓝牙和外设连接和收发数据的流程
- uC/OS-II中OSUnMapTbl[]的原理
- asp.net Cache vs memcached
- 【NOI2015Day1】【bzoj4195】【bzoj4196】【bzoj4197】
- 【dp】【NOI 2015】【bzoj 4197】寿司晚宴
- MFC 单文档去掉标题栏和菜单栏