简体   繁体   中英

Passing Javascript Array to C# Code Behind using Ajax POST

I am trying pass javascript array to C# code behind using ajax post back. but When I try this It didn't work. I have attached My code below. Can any one please help me on this??

test.aspx

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="hotelbeds.test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Tooltip - Custom animation demo</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css" />
<script type="text/javascript">
    function testbook(hotelcode) {
        alert("clicked");
        //var values = {"1","2","3"};
        var mycars = new Array();
        mycars[0] = "Saab";
        mycars[1] = "Volvo";
        mycars[2] = "BMW";
        var theIds = JSON.stringify(mycars);
        alert(theIds);
        $.ajax({
            type: "POST",
            url: "test.aspx/Done",
            contentType: "application/json; charset=utf-8",
            data: "{ 'ids':'"+ theIds +"'}",
         dataType: "json",
         success: function (result) {
             alert('Yay! It worked!');               
         },
         error: function (result) {
             alert('Oh no :(');
         }
        });


        return false;

    }

</script>
</head>
<body>
    <form id="form1" runat="server">

    <div>

    </div>
    </form>
</body>

</html>

Code Behind File

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web.Services;
using System.Configuration;
using System.Drawing;

namespace hotelbeds
{

    public partial class test : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs ea)
        {
            ImageButton testbtn = new ImageButton();
            testbtn.OnClientClick = "return testbook('15000')";
            form1.Controls.Add(testbtn);

        }

        [WebMethod]
        public static void done(string[] ids)
        {
            String[] a = ids;

        }


    }
}

When I change the webmethod as below It worked without any issue. but It's not usefull for me.

  [WebMethod]
        public static void done(string ids)
        {
            String a = ids;

        }

Wrong json format:

"{ 'ids':'"+ theIds +"'}"

Use double quotes. Or do it better:

JSON.stringify({ ids: mycars });

Try this

    [WebMethod]
    public static void done(List<string> ids)
    {
        String[] a = ids.ToArray();

    }

Try this. I've had success passing javascript arrays as such. The only limitation is that an object with the params keyword must be the last argument passed to the web method.

http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

[WebMethod]
public static void PassArray(params object[] list)
{
    int i = 0;
    while (i < list.Length)
    {
        //do your thing here
        i++
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM