Javascript 在MVC中将字符串数组从视图传递到控制器的操作#

Javascript 在MVC中将字符串数组从视图传递到控制器的操作#,javascript,arrays,asp.net-mvc-3,jquery,url-routing,Javascript,Arrays,Asp.net Mvc 3,Jquery,Url Routing,我有一个返回数组(string[])的方法,我正在尝试将此字符串数组传递到操作中。目前我无法传递参数。我是MVC3的新手。 请让我知道为什么我不能将参数传递给ActionResult..我已经用相同的参数名定义了ActionResult。。 提前谢谢大家 $('#export-button').click(function () { var columnLength = $("#grid")[0].p.colNames.length; var c

我有一个返回数组(
string[]
)的方法,我正在尝试将此字符串数组传递到操作中。目前我无法传递参数。我是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})';


        });
$(“#导出按钮”)。单击(函数(){
var columnLength=$(“#网格”)[0].p.colNames.length;
var columnNames=“”;
对于(变量i=0;i
然后,在ZendFramework控制器中,您可以获取请求上的变量:

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

$('#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 });
});
更新:

如果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();
});
$(“#导出按钮”)。单击(函数(){
var Val1=jQuery(txt_search1.val();
$(“#隐藏形式”).remove();
//动态创建表单
变量形式=$('')
.attr({id:“隐藏形式”,
操作:“/Home/Index”,
方法:“张贴”,
样式:“显示:无
})
.附于(“主体”);
//将“Val1”作为隐藏字段添加到表单中。
$('').attr({name:“Val1”,value:Val1,type:“hidden”}).appendTo(form);
var columnLength=$(“#网格”)[0].p.colNames.length;
//将“columnNames”作为隐藏字段添加到表单中
对于(变量i=0;i
array取代了新的“{Val1=Val1,columnNames=columnNames}”?为什么不将项目推送到javascript数组并发布到服务器,而不是混乱的查询字符串?谢谢你的快速回复@戈文。。我想将Val1和ColumnName[string]数组传递给服务器。。我的表达不正确。。请告诉我如何通过javascript将这些值传递给服务器。谢谢。使用ajax,URL不会更改为新视图。。。“我的需要”当前位于://Localhost/search/OrganizationSearch,我想转到://Localhost/search/OrgDataExport。所以我使用Url.Action方法。。他还用
asp.net-mvc-3
来标记他的问题,而不是
php
zend
。除此之外,
'Val1'=>Val1
是无效的javascript。完全正确@DarinDimitrov,感谢您指出这一点(对它进行了投票)。我知道Louis没有标记php或Zend,但这只是我给出的与JQuery Ajax相关的答案的MVC实现。:)@洛甘萨马。。谢谢你的回复。。我想在MVC3中使用.cshtml中的javascript代码来访问Controller.cs。@alok_dida.“columnNames”变量只是字符串。我从jquery网格中查询所选列。当我打印出来的时候,它得到了像“col1,col2,col3,col4”这样的值。所以我想把这个字符串发送给控制器。现在我按照你的建议进行测试。使用ajax。谢谢。使用ajax,URL不会更改为新视图。。。“我的需要”当前位于://Localhost/search/OrganizationSearch,我想转到://Localhost/search/OrgDataExport。所以我使用Url.Action方法。。要转到新URL…@Louismm。您可以直接使用window.location='://localhost/search/OrgDataExport?Val1='+Val1+'&columnNames='+columnNames;在导出按钮上单击事件。请看一看你好,马克。。感谢您的代码示例。。它对我有用..只需要编辑abit..“Index?”+$.param({Val1:Val1,columnNames:columnNames});请让我知道一件事,我可以隐藏我的参数从网址。bcos现在在url中,我的参数太长。。有什么建议吗?等待你的答复,这是一个真正的问题。我建议你通过使用POST的HTML表单向服务器提交值。你能给我看一些示例代码吗?或者请参考我的任何帖子。这是我第一次体验。。。提前谢谢..我更新了答案。如果您的视图中已经有一个表单,请使用该表单,否则请创建一个动态表单,就像我上面所做的那样。谢谢你的代码,这很有效。让我知道一件事,我可以返回视图()和新窗口吗?请给我提些建议。。
$('#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 });
});
public ActionResult Index(string val1, string[] columnNames)
{
// Your code
}
$('#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();
});