最近想在一个.net mvc的项目中加一个多条件检索查询的页面,之前都是用参数名:值这种方式传参给控制器里的方法,但是多个条件检索感觉这种方法不太方便,就找了一下传参数的一些文章,涨了见识。
1.传参数组类型数据
前端
var _lev = {};
_lev["lev[0].Status"] = "5"; //这里必须从零开始 名字必须一样
_lev["lev[1].Status"] = "6";
$.post("Edit", _lev
, function(json) {
if (json == "1") { alert(''成功)}
}, "json");
服务器端
接受 Level类型数组
[HttpPost]
public ActionResult Edit(Level[] lev)
{
return Json(lev);
}
2.传参Dictionary<T,T>类型数据
与上面的一致只是感觉传的是KeyValuePair数组
前端
$("tr[name = 'LeelArea']").each(function(index) {
_lev["levelOrder[" + index + "].key"] = index; //这里必须从零开始 名字必须一样
_lev["levelOrder[" + index + "].value"] = $(this).find("textarea").val();
});
if ($(this).valid()) {
$.post("Edit", _lev
, function(json) {
Alert(json);
}, "json");
}
服务器端
[HttpPost]
public ActionResult Edit(Dictionary<int,string> levelOrder)
3传参自定义类型数据
//js
//List<User>
var _lev = {};
_lev["user[0].name"] = "wudi";
_lev["user[0].pwd"] = "pwd";
_lev["user[1].name"] = "wudi";
_lev["user[1].pwd"] = "pwd";
$.post("/home/Add", _lev, function(result) {
if (result <= 0) {
alert('保存记录失败!');
}
else {
c_pr_c.ID = result;
}
}, "json");
//Dictionary<string,user>
var _lev = {};
_lev["stock[0].key"] = "MSFT"
_lev["stock[0].value"] = "Microsoft Corporation"
_lev["stock[1].key"]= "AAPL"
_lev["stock[1].value"] = "Apple, Inc."
$.post("/home/AddDic", _lev, function(result) {
if (result <= 0) {
alert('保存记录失败!');
}
else {
c_pr_c.ID = result;
}
}, "json");
public class user
{
public string name { get; set; }
public string pwd { get; set; }
}
public ActionResult Add(List<user> user)
{
return View();
}
public ActionResult AddDic(IDictionary<string, string> stock)
{
return View();
}
三种传参数方式其实是一种都要_lev中括号里面的变量名必须和Action方法中的参数名和数据的结构一致即可传参。
ASP.Net MVC中应该有一种机制解析前端传过来的参数,自动匹配名字结构都一样的参数,值得注意的是我之前把参数名写的不一致但是还是传过来值,当时我参数是字典型,Debug环境下看见获取的值不是预期的参数而是Controller和Action。。。
ps:原来这种取action的参数列表的机制叫ModelBinding,下面是相关的链接,有大大详解