【问题标题】:Pass array from client side to service side c#将数组从客户端传递到服务端c#
【发布时间】:2018-06-18 07:33:33
【问题描述】:

我正在使用带有以下函数的 onclientclick 在按钮单击时调用 javascript 函数。

 function addValues() {
        debugger;
        var arrValue = [];
        var hdnValue = document.getElementById("hdn").value;
        var strValue = hdnValue.split(',');
        for (var i = 0; i < strValue.length; i++) {
            var ddlValue = document.getElementById(strValue[i]).value;
            arrValue.push(ddlValue);
        }
    }

arrValue 数组将包含所有必需的值,我如何将此数组值移动到服务器端以进行进一步处理。

更新 1:

HTML:

function addValues() {
        debugger;
        var arrddlValue = [];
        var hdnddlValue = document.getElementById("hdnDDL").value;
        var strddlValue = hdnddlValue.split(',');
        for (var i = 0; i < strddlValue.length; i++) {
            var ddlValue = document.getElementById(strddlValue[i]).value;
            arrddlValue.push(ddlValue);              
        }
    }

    $.ajax({
        url: '',
        data: { ddlArray: arrddlValue },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (data) {

        },
        error: function (x, e) {
        }
    });

代码:

protected void btnSort_Click(object sender, EventArgs e)
    {
        try
        {
            if (Request["ddlArray[]"] != null)
            {
                string[] arrValues = Array.ConvertAll(Request["ddlArray[]"].ToString().Split(','), s => (s));
            }
        }
     }

【问题讨论】:

  • 使用Ajax
  • 让我们知道您对答案的反馈。

标签: javascript c# asp.net .net c#-4.0


【解决方案1】:

如果您使用的是 Asp.net WebForm 应用程序,

方法 1:您可以将数组值存储在隐藏的输入控件中,并在 c# 编码中检索保存的数据。

方法 2:在您的服务器端 c# 代码中定义 web 方法,并将此 javascript 数组值作为 ajax 调用传递。

方法 1 的链接:https://www.aspsnippets.com/Articles/Pass-JavaScript-variable-value-to-Server-Side-Code-Behind-in-ASPNet-using-C-and-VBNet.aspx

方法 2 的链接:https://www.aspsnippets.com/Articles/Send-and-receive-JavaScript-Array-to-Web-Service-Web-Method-using-ASP.Net-AJAX.aspx

【讨论】:

    【解决方案2】:

    我会通过用一个不太可能出现在我的值中的特殊字符(例如:§)来对数组进行“字符串化”,然后在 jQuery.ajax() 函数的帮助下,我会将它发送到后端(ASP.NET MVC) 动作方法:

    $.ajax({
       url : 'http://a-domain.com/MyController/MyAction',
       type : 'POST'
       data : 'data=' + myStringifiedArray;
    });
    

    我的后端会是这样的(在 MyController 类中):

    [HttpPost]
    public ActionResult MyAction(string data)
    {
        string[] arrValue = data.Split('§');
        ...
    }
    

    更新

    对于 ASP.NET 表单,ajax 请求将是:

    $.ajax({
       url : 'http://a-domain.com/MyPage.aspx/MyMethod',
       type : 'POST'
       data : 'data=' + myStringifiedArray;
    });
    

    后端会是这样的:

    [System.Web.Services.WebMethod]
    public static void MyMethod(string data)
    {
        string[] arrValue = data.Split('§');
        ...
    }
    

    你会在这里找到更准确的解释:https://www.aspsnippets.com/Articles/Call-ASPNet-Page-Method-using-jQuery-AJAX-Example.aspx

    【讨论】:

    • 这不是 MVC 应用程序。
    • 我更新了答案,请检查。我希望这能回答你的问题。
    • 这不是类型安全的,因为MyMethod 不清楚,因为输入的参数是string 而不是int[]List&lt;int&gt;,您应该在客户端将数组转换为字符串。
    【解决方案3】:

    如果您的框架是 ASP.Net,您可以通过 $.ajax 传递它,我传递的数组如下:

    $.ajax({
    url: '',
    data: {  AbArray: arrValue },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    success: function (data) {
    
    },
    error: function (x, e) { 
    }
    

    });

    并在后端获取它:

    if (request["AbArray[]"] != null)
    {
        int[] arrValues = Array.ConvertAll(request["AbArray[]"].ToString().Split(','), s => int.Parse(s));
    }
    

    假设数组是int

    以上示例使用Generic-Handler

    如果您想使用webmethod,请执行以下操作:

    [WebMethod(EnableSession = true)]
    public static void PassArray(List<int> arr)
    { 
    }
    

    而 Ajax 会是这样的:

    function addValues() {
    debugger;
    var arrddlValue = [];
    var hdnddlValue = document.getElementById("hdnDDL").value;
    var strddlValue = hdnddlValue.split(',');
    for (var i = 0; i < strddlValue.length; i++) {
        var ddlValue = document.getElementById(strddlValue[i]).value;
        arrddlValue.push(ddlValue);
    } 
    var jsonVal = JSON.stringify({ arr: arrValue });
    $.ajax({
        url: 'YourPage.aspx/PassArray',
        data: jsonVal,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        success: function (data) {
    
        },
        error: function (x, e) {
        }
    });
    }
    

    将 Ajax Url 更改为您的 PassArray 地址,这意味着 YourPage.aspx 应更改为代码隐藏中包含 PassArray 的页面名称。

    更多信息Read This

    【讨论】:

    • 我尝试在单击按钮时无法在服务器端获取值。更新了我的帖子,如果我错了,请纠正我。
    • @vicky,您的代码存在一些问题,1-您应该定义webmethod 2-ajax url 是空正确的 3-该代码应该在 webmethod 中而不是按钮单击 4-调用JavaScript 中 addValues 末尾的客户端中的 ajax。
    • @Aria - 函数 addValues() { 调试器; var arrddlValue = []; var hdnddlValue = document.getElementById("hdn").value; var strddlValue = hdnddlValue.split(','); for (var i = 0; i put ajax function here } - 这是这个地方吗?
    • 现在知道了。以及如何在我的按钮单击事件中获取 passarray 方法值以进行进一步处理。
    • 您需要将其保存在 session 或 cookie 或其他东西中才能在 btn_click 中获取它以进行进一步处理,请阅读更多关于 ASP.Net 和 JQuery 的信息
    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多