使用ajax将批量数组值传递给codebehind(cs)

时间:2016-07-05 16:22:38

标签: c# jquery asp.net arrays ajax

我必须使用ajax将批量数组值传递给后面的代码(cs)我已经研究了很多并且使用了这段代码但它对我来说没有用,下面是我使用的代码,我需要传递批量数组使用ajax

在(cs)后面的代码中的值

JS

        <head runat="server">
    <title></title>
    <script>
        function foo() {
            var values = ["1,", "2", "3"];

            // Make the ajax call
            $.ajax({
                type: "POST",
                url: "Default.aspx/Done", // the method we are calling
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ arr: values }),
                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>
  <asp:Button ID="Button1" runat="server" Text="Button"  UseSubmitBehavior="false" OnClientClick="return foo();" />
    </div>
    </form>
</body>

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;

namespace PassingValueFromJavascriptToCs
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        [WebMethod]
        public static void done(string[] ids)
        {
            String[] a = ids;
            // Do whatever processing you want
            // However, you cannot access server controls
            // in a static web method.
        }
    }
}

2 个答案:

答案 0 :(得分:0)

至少有一个问题是您的网址是“Default.aspx / Done”,但该方法似乎位于WebForm3.aspx / Done上。 您的代码实际发生了什么?这是错误的吗?

答案 1 :(得分:0)

首先,aspx的按钮是将你的aspx表单发送到回发,这样你就需要像这样更改aspx

<script>
    function foo() {
        var values = ["1,", "2", "3"];

        // Make the ajax call
        $.ajax({
            type: "POST",
            url: "Default.aspx/Done", // the method we are calling
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ arr: values }),
            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>
       <asp:Button ID="Button1" runat="server" Text="Button"  UseSubmitBehavior="false" OnClientClick="return foo();" />
        </div>
        </form>
    </body>

foo方法返回false的原因是你不想让你的按钮开始回发。我还添加了另一个属性UseSubmitBehavior =&#34; false&#34;保证它。

脚本部分我将值对象更改为实数数组,然后在发送数据时,我将其转换为json,其中包含值对象。这段代码可以在您的示例中正常使用

修改:对于我的测试中的工作版

aspx页面(修剪主页的详细信息)

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <script>
        function test() {
            var values = ["1,", "2", "3"];

            // Make the ajax call
            $.ajax({
                type: "POST",
                url: "Default.aspx/test", // the method we are calling
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ arr: values }),
                dataType: "json",
                success: function (result) {
                    debugger;
                    alert('Yay! It worked!');
                },
                error: function (result) {
                    alert('Oh no :(');
                }
            });
            return false;
        }
    </script>
    <asp:Button ID="Button3" UseSubmitBehavior="false" OnClientClick="return test();" runat="server" Text="Deneme" />

</asp:Content>

RouteConfig和原始方法

 public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            //settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }

    [WebMethod]
    public static void test(string[] arr)
    {

    }