Url.Action将字符串数组从View传递到MVC中的Controller#

时间:2012-06-26 04:06:12

标签: javascript arrays asp.net-mvc-3 jquery url-routing

我有一个方法返回一个数组(string[]),我试图将这个字符串数组传递给一个Action.Currently我无法传递我的参数。我是MVC3的新手。 请告诉我为什么我不能将参数传递给ActionResult ..我已经使用相同的参数名称定义了ActionResult。 提前全部感谢....

$('#export-button').click(function () {

            var columnLength = $("#grid")[0].p.colNames.length;
            var columnNames = "";
            for (var i = 0; i < columnLength; i++) {
                if ($("#grid")[0].p.colModel[i].hidden == false) {
                    columnNames = columnNames + $("#grid")[0].p.colModel[i].name + ',';
                }
            }
            var Val1 = jQuery(txt_search1).val();
            alert(Val1); alert(columnNames);
            document.location = '@Url.Action("OrgDataExport","Search", new { Val1 = Val1 , columnNames = columnNames})';


        });

3 个答案:

答案 0 :(得分:1)

试试这个,

$('#export-button').click(function () {

    var columnLength = $("#grid")[0].p.colNames.length;

    // columnNames is an object now
    var columnNames = {};

    for (var i = 0; i < columnLength; i++) {
        if ($("#grid")[0].p.colModel[i].hidden == false) {
            columnNames[i] = $("#grid")[0].p.colModel[i].name;
        }
    }

    var Val1 = jQuery(txt_search1).val();

    document.location = "Home/Index/" + $.param({ Val1 = Val1 , columnNames = columnNames });
});

columnNames作为字符串数组

的操作
public ActionResult Index(string val1, string[] columnNames)
{
// Your code
}

<强>更新

如果URL太大,您可以使用POST方法通过表单提交值。如果您的视图已经有表单使用,则可以动态创建动态表单并通过POST提交值。

$('#export-button').click(function () {

    var Val1 = jQuery(txt_search1).val();    

    $("#hidden-form").remove();

    // create a form dynamically
    var form = $('<form>')
            .attr({ id: "hidden-form",
              action: "/Home/Index",
              method: "post",
              style: "display: none;"
            })
            .appendTo("body");            

    // add the "Val1" as hidden field to the form.
    $('<input>').attr({ name: "Val1 ", value: Val1, type: "hidden" }).appendTo(form);

    var columnLength = $("#grid")[0].p.colNames.length;

    // add the "columnNames" as hidden fields to the form
    for (var i = 0; i < columnLength; i++) {
        if ($("#grid")[0].p.colModel[i].hidden == false) {
            var t = $("#grid")[0].p.colModel[i].name;
            $('<input>').attr({ name: "columnNames", value: t, type: "hidden"
             }).appendTo(form);
        }
    };

    // submit the form
    form.submit();
});

答案 1 :(得分:0)

 for (var i = 0; i < columnLength; i++) {
                if ($("#grid")[0].p.colModel[i].hidden == false) {
                    columnNames = columnNames + $("#grid")[0].p.colModel[i].name + ',';
                }
            }
            var Val1 = jQuery(txt_search1).val();
            alert(Val1); alert(columnNames);
            document.location = '@Url.Action("OrgDataExport","Search", new { Val1 = Val1 , columnNames = columnNames})';

嗨路易斯,

您正在尝试从服务器端标记访问javascript varaibles Val1和columnNames,但这是不可能的。有关详细信息,请参阅此URL

您可以通过以下方式完成。

    var jsonData = { val1 : Val1, columnNames : columnNames };

$.ajax({
          type: "GET", //GET or POST or PUT or DELETE verb
                url: "Home/Index", // Location of the service
                data: jsonData,
                contentType: "application/json; charset=utf-8", // content type sent to server
                processdata: true, //True or False
                success: function () {
                  alert("success")
                }
       });

在你的控制器方面,你必须像

一样写
public ActionResult Index(string val1, string columnNames)
{
// Your code
}

答案 2 :(得分:0)

您标记了JQuery-Ajax,但我没有在代码示例中看到任何ajax尝试?所以我猜你想知道一个面向Ajax的解决方案。您可能没有使用Zend Framework,但我希望这些答案可以帮助您找到解决方案的正确方向。

从JS / Zend框架体验中,您可以看到类似

的内容
$('#export-button').click(function () {
   ....
   var actionUrl= "/controller/action/";
   $.ajax({
      url: actionUrl,
      data: {
        variable1: "OrgDataExport",
        variable2: "Search",
        Val1: Val1,
        columnNames: columnNames            
      },
      dataType: "json",
      success: function(json) {
        //do stuff
      }
   });
   ....
});

在ZendFramework控制器中,您可以获取请求中的变量:

$Val1 = $this->_request->getparam("Val1");