码迷,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
迷上了代码!