码迷,mamicode.com
首页 > Web开发 > 详细

mvc初学controller参数传递感想

时间:2015-08-13 19:37:07      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

从视图中传递参数给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/id=12/value=1234‘,
    success: function (data) {
        alert(data);
    },
    error: function () {
        setContainer(‘ERROR!‘);
    }
});    

 


缺点:这种方式要根据控制器中方法的参数的不用,制定不同的路由规则,然后写相应的url,跟方法
一的不同之处就是路由规则还有url的写法,


其他:
就是前面说的以data方式传参,不推荐,因为put和delete会出错,而且data格式不一样的时候可能还
要设置dataType和contenttype等格式

mvc初学controller参数传递感想

标签:

原文地址:http://www.cnblogs.com/fuhai/p/4727960.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!