将数组从客户端传递到服务端c#

时间:2018-01-09 09:41:57

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

我使用带有以下功能的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));
            }
        }
     }

3 个答案:

答案 0 :(得分: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网址,因为您的PassArray地址YourPage.aspx应更改为其中包含PassArray代码隐藏的网页名称。

了解详情 Read This

答案 1 :(得分: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 :(得分:0)

我会通过使用一个不太可能出现在我的值中的特殊字符(例如:§)来对数组进行“字符串化”,然后在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