【问题标题】:Url.Action Passing string array from View to Controller in MVC#Url.Action 在 MVC 中将字符串数组从视图传递到控制器#
【发布时间】:2012-06-26 04:06:12
【问题描述】:

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


        });

【问题讨论】:

  • 数组插入了新的 '{ Val1 = Val1 , columnNames = columnNames}'?
  • 而不是凌乱的查询字符串,为什么不将项目推送到 javascript 数组并发布到服务器? stackoverflow.com/questions/1290131/…stackoverflow.com/questions/7116099/…
  • 感谢您的快速回复.. @Govind.. 我想将 Val1 和 ColumnName[string] 数组传递给服务器.. 我的表达不正确.. 请告诉我如何传递给这些通过 javascript 将值传递给服务器。谢谢。
  • 使用 ajax,URL 不会更改为新视图...我想要的是目前在 ://Localhost/search/OrganizationSearch 上,我想去 ://localhost/search/OrgDataExport 。所以我使用 Url.Action 方法.. 去 New URL..

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


【解决方案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();
});

【讨论】:

  • 嗨@Mark..感谢您的代码示例..它对我有用..只有我需要编辑abit..“索引?” + $.param({ Val1 : Val1 , columnNames : columnNames });请让我知道一件事,我可以从 url 隐藏我的参数吗? bcos 现在在 url 中,我的参数太长了.. 有什么建议吗?等待你的回复,
  • 这是一个真正的问题。我建议您使用 POST 通过 HTML 表单将值提交给服务器。
  • 你能给我看任何示例代码吗?或者请给我发任何帖子。这是我的第一个经验...提前谢谢..
  • 我更新了答案。如果您的视图中已经有一个表单,请使用它创建一个动态表单,就像我在上面所做的那样。
  • 嗨,马克。感谢您的代码。它工作。让我知道一件事,我可以用新窗口返回 View() 吗?请给我一些建议..
【解决方案2】:
 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 变量 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
}

【讨论】:

  • @alok_dida.."columnNames" var 只是字符串。我从 jquery grid 选择的列中查询。当我打印出来时,它得到了像“col1,col2,col3,col4”这样的值。所以我想将此字符串发送给控制器。现在我按照你的建议进行测试。用阿贾克斯。谢谢。
  • 使用 ajax,URL 不会更改为新视图...我想要目前在 ://Localhost/search/OrganizationSearch 上,我想去 ://localhost/search/OrgDataExport 。所以我使用 Url.Action 方法.. 去 New URL..
  • @Louismm 。可以直接使用 window.location = '://localhost/search/OrgDataExport?Val1='+v​​al1+'&columnNames='+columnNames; 在您的导出按钮单击事件上。请看tizag.com/javascriptT/javascriptredirect.php
【解决方案3】:

您标记了 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");

【讨论】:

  • 他还用asp.net-mvc-3 标记了他的问题,而不是phpzend。除此之外,'Val1' =&gt; Val1 是无效的 javascript。
  • 完全正确@DarinDimitrov,感谢您指出这一点(赞成)。我知道 Louis 没有标记 php 或 Zend,但这只是我给出的 JQuery-Ajax 相关答案的 MVC 实现。 :)
  • @logansama.. 感谢您的回复.. 我想使用 .cshtml 中的 javascript 代码到 MVC3 中的 Controller.cs。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2011-10-15
  • 2018-09-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多