mvc初学controller参数传递感想
从视图中传递参数给controller也有很多种方式
方法一(推荐):
路由
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等格式
mvc初学controller参数传递感想的更多相关文章
- Spring mvc框架 controller间跳转 ,重定向 ,传参
一.需求背景 1. 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. @Req ...
- 浅谈MVC页面之间参数传递
关于MVC页面之间的传值,有多种方式,下面,我们就Html.RenderAction 方式 和 Html.RenderPartial 方式 来给大家分享一下有什么不同. 一.Html.RenderAc ...
- ASP.NET MVC控制器Controller中参数
前述文章参见:ASP.NET MVC控制器Controller 绪论 之前的控制器返回的均为常量字符串,接下来展示如何获取请求传来的参数,而返回"动态"的字符串. 可以在操作方法B ...
- 自己动手做Web框架—MVC+Front Controller
在我前面一篇博文<逃脱Asp.Net MVC框架的枷锁,使用Razor视图引擎>发表之后,很多人关心,脱离了之后怎么办?那么这可以说是它的续篇了. 同时,这也是eLiteWeb开源软件的一 ...
- Asp.net MVC 中Controller返回值类型ActionResult
[Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...
- MVC:Controller向View传值方式总结
Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...
- 返璞归真 asp.net mvc (3) - Controller/Action
原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...
- MVC+Front Controller
MVC+Front Controller 在我前面一篇博文<逃脱Asp.Net MVC框架的枷锁,使用Razor视图引擎>发表之后,很多人关心,脱离了之后怎么办?那么这可以说是它的续篇了. ...
- spring mvc在Controller中获取ApplicationContext
spring mvc在Controller中获取ApplicationContext web.xml中进行正常的beans.xml和spring-mvc.xml的配置: 需要在beans.xml中进行 ...
随机推荐
- 算法导论——lec 11 动态规划及应用
和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互 ...
- Sftp和ftp 差别、工作原理等(汇总ing)
Sftp和ftp over ssh2的差别 近期使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议是不同的.sftp是ssh内含的协议,仅仅 ...
- 网络测试工具netperf
Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输.Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求 ...
- 将samba加入到windows域《转载》
将samba加入到windows域 那什么是域呢? 一台Windows计算机,它要么隶属于工作组,要么隶属于域.所以说到域,我们就不得不提一下工作组,工作组是MS的概念,一般的普遍称谓是对等网. 工作 ...
- mysql高可用方案MHA介绍
mysql高可用方案MHA介绍 概述 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA, ...
- MVC学习四
第七节 讲述了增加model中类的属性,由于数据库中已存在表,表中没有存在新加的列,所以可以删除数据库或者在数据库中新增一列,另可以在controller中新增一个数据库初始化的类,并在Globa ...
- Geodatabase - 判断是否处于编辑状态
Engine中提供IDatasetEdit来判断数据是否处于编辑状态,我们知道,在ArcMap中,进行编辑的不一定都是要素类,也可以是表,网络几何等.以下能在ArcMap中进行编辑的数据都实现了 ID ...
- GDB调试一
http://blog.csdn.net/haoel/article/details/2881 GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行 ...
- string 与char* char[]之间的转换
1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().en ...
- django web 中添加超链接
django web 中添加不传参的超链接的方法如下: html: 在web中的超链接中加入一下url <a href="{% url 'app_name.views.url_func ...