使用jquery post将Dictionary数据传递给Controller字符串方法

时间:2012-04-26 08:29:32

标签: jquery ajax asp.net-mvc

我的Jquery代码如下所示

 $("#btnExec").live('click', function () {
       var data1= "lorem ipsum";
       var data2= "lorem ipsum";
       var data3= "lorem ipsum";
       var dict = new Object();

       $("#ArgsTable tr").each(function (e) {
                var firstTD = $(this).find("td").eq("0").html().trim().replace(/\s/g, "");
                var secondValue = $(this).find("td").eq("1").find("input:text").val();
                dict[e] = [firstTD,secondValue]; 
       });

       $.ajax({
                type: 'POST',
                cache: false,
                data: { strdata1: data1, strdata2: data2, strdata3: data3, myDictionary: dict },    
                url: '<%=Url.Action("ExecData","Home") %>',
                success: function (data) {        
                }
              });
 });

我的控制器方法如下:

public string ExecData(string strdata1, string strdata2, string strdata3,  Dictionary<object, object> myDictionary)
{
    //do some stuff...
}

如果我单击 btnExec 表示,它会正确触发带有字符串值的控制器方法,但字典值始终为 null ..

在我的场景中“控制器方法的返回类型应该只是字符串”

我该如何解决这个问题?提前致谢 !!!

1 个答案:

答案 0 :(得分:5)

Tyr喜欢这个:

[HttpPost]
public ActionResult ExecData(
    string strdata1, 
    string strdata2,  
    string strdata3, 
    Dictionary<string, string> myDictionary
)
{
    return Content("hello world");
}

然后:

var data = {
    strdata1: 'lorem ipsum',
    strdata2: 'lorem ipsum',
    strdata3: 'lorem ipsum'
};

$('#ArgsTable tr').each(function (index, item) {
    var firstTD = $(this).find('td').eq(0).html().trim().replace(/\s/g, '');
    var secondValue = $(this).find('td').eq(1).find('input:text').val();
    data['myDictionary[' + index + '].Key'] = firstTD;
    data['myDictionary[' + index + '].Value'] = secondValue;
});

$.ajax({
    url: '<%=Url.Action("ExecData","Home") %>',
    type: 'POST',
    traditional: true,
    data: data,
    success: function (result) {

    }
});