我已经在.net mvc网页上设置了一个jquery bootgrid,它向我显示了一个带有一些命令的网格,例如排序,搜索自动完成,滚动页面。图书馆在这里:http://www.jquery-bootgrid.com/documentation
网格运行良好,我决定通过ajax将命令发送给后面的函数。然后,库将字符串列表发送到该函数,用于处理网格:
current 1
rowCount 10
sort[filename] asc
其中filename是我要排序的列之一。它可以是sort [id],sort [name]或任何我设置的列。 值非常清楚,ajax将当前网格页面,行数和排序方向发送给函数。 但是当我进入函数时,我只能读取前两个值:
public ActionResult AjaxRequestData(string current,string rowCount,string sort)
此定义从网页读取前2个值,但无法读取排序,因为var的实际名称是sort [filename],它不是字符串数组。如果我将sort声明为string或string [],结果始终为空。
如何在动作中声明变量?到目前为止,我可以使用formcollection [“ sort [filename]”],formcollection [“ sort [id]”]等读取排序,但是我有很多列,而且我真的不想为每个他们,对此还有其他解决方案吗?
答案 0 :(得分:1)
方法1 。 考虑您有带有“ col1,col2,col3,...”列的表。 您可以使用:
public ActionResult AjaxRequestData(string current,string rowCount,Sort sort){
//sort.col1 == 'asc' (consider sorted by col1 in ascending order)
}
public class Sort
{
public string col1 { get; set; }
public string col2 { get; set; }
public string col3 { get; set; }
//... other columns
}
方法2。 您可以删除参数并手动解析数据。 (注意,我在这里使用发布而不是获取信息)
[HttpPost]
public object AjaxRequestData(){
string jsonContent = Request.Content.ReadAsStringAsync().Result;
Dictionary<string, string> keyvalues = new Dictionary<string, string>();
string[] keyvalue_strings = jsonContent.Split('&');
string sort_column = "";
string sort_direction = "";
for (var i = 0; i< keyvalue_strings.Length; i++)
{
var a = keyvalue_strings[i].Split('=');
a[0] = a[0].Replace("%5B", "[").Replace("%5D", "]");
keyvalues.Add(a[0], (a[1]));
if (a[0].Contains("sort"))
{
sort_column = a[0].Replace("sort[", "").Replace("]", "");
sort_direction = a[1];
}
}
//now you have keyvalues, sort_column, sort_direction.
//...
}