Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax向代码隐藏(c#)发送javascript数组_C#_Javascript_Jquery_Asp.net_Webforms - Fatal编程技术网

使用ajax向代码隐藏(c#)发送javascript数组

使用ajax向代码隐藏(c#)发送javascript数组,c#,javascript,jquery,asp.net,webforms,C#,Javascript,Jquery,Asp.net,Webforms,我对C#和javascript有点陌生,所以虽然我的问题很具体,但我愿意接受任何替代方案 我有一个值数组(我在javascript函数中创建的),我希望将其发送到代码隐藏文件,以便在方法中使用。从我所研究的使用ajax和使用JSON字符串化数组似乎是最好的方法 我的问题是 我可以使用此方法传递数组吗 如何在服务器端(在我的代码隐藏中)捕获信息 传递值的Javascript var jsonvalues = JSON.stringify(values); var callback = window

我对C#和javascript有点陌生,所以虽然我的问题很具体,但我愿意接受任何替代方案

我有一个值数组(我在javascript函数中创建的),我希望将其发送到代码隐藏文件,以便在方法中使用。从我所研究的使用ajax和使用JSON字符串化数组似乎是最好的方法

我的问题是

  • 我可以使用此方法传递数组吗

  • 如何在服务器端(在我的代码隐藏中)捕获信息

  • 传递值的Javascript

    var jsonvalues = JSON.stringify(values);
    var callback = window.location.href
    $.ajax({
      url: callback
      type: "POST",
      contentType: 'application/json',
      data: jsonvalues
    });
    
    我见过许多使用[WebMethod]或某种Web服务来捕获数据的解决方案,我能用它在代码隐藏文件中工作而不必返回数据吗

    下面是我在代码隐藏文件中使用的内容

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

    最简单的方法是使用ASP.NETMVC和数据绑定到列表。因此,对于字符串列表,这将非常简单。只需执行如下所示的控制器操作:

    [HttpPost]
    public ActionResult MyAction(string[] values)
    {
        ... debug and see that values gets set to your array from javascript ...
    }
    
    然后在
    $.ajax
    调用中传递
    data:values
    。没有必要严格化,jQuery将知道该做什么。对于更复杂的列表绑定,请查看以下内容(以及许多其他类似的资源讨论绑定到复杂对象列表的奇特方法):

    要从网页或web服务调用
    [WebMethod]
    方法,请参阅本指南:


    基本上,您需要的url是
    ServicePage.aspx/MethodName

    将数据放在runat=server的隐藏字段中。发布表单并正常获取数据。

    我已经使用ASP.NET MVC为此编写了一个深入的示例,但是它可以很容易地适应WebForms

    HTML和jQuery看起来几乎完全相同,除了调用WebMethod的地方

    如果您正在使用的页面名为
    Default.aspx
    ,并且方法名为
    Done
    ,那么您的WebMethod的URL将为
    Default.aspx/Done

    <script>
           // Grab the information 
           var values = {"1,","2","3"};
           var theIds = JSON.stringify(values);
    
           // Make the ajax call
           $.ajax({
             type: "POST",
             url: "Default.aspx/Done", // the method we are calling
             contentType: "application/json; charset=utf-8",
             data: {ids: theIds },
             dataType: "json",
             success: function (result) {
                 alert('Yay! It worked!');               
             },
             error: function (result) {
                 alert('Oh no :(');
             }
         });
      </script>
    

    我还需要在
    $.ajax
    调用中指定contenttype吗?我应该为调用使用
    processData:false
    吗?我通常绑定强类型的东西,所以我设置表单并发布它们。在我的例子中,我甚至不需要使用$.ajax,我只需要使用$.post。这是我能给你的最好的建议。设置它,并在上面显示的控制器操作中设置断点。然后,查看请求对象并查看传入了哪些参数。基本上,您希望名为“values”的参数具有逗号分隔的列表。然后,您可以根据需要定制jQuery。谢谢您的帮助!然而,我刚刚发现我正在构建的平台(Sitecore)还不支持MVC(这个版本将在本月底发布),我正试图使用@R0MANARMY提到的
    [WebMethod]
    来代替它,但无法获得我的
    ajax
    调用来触发我编写的方法。我修改了ajax调用,使之成为
    url:'Register/trigger'
    ,其中trigger是回调中的方法。我错过什么了吗?再次感谢所有的帮助!我将用这个编辑我的答案,但我认为如果你使用的是页面,你需要类似于
    url:'Register.aspx/trigger'
    ,如果你使用的是老式服务,你需要类似于
    .asmx
    。查看此查看更多信息:谢谢!在充实了我的问题之后,很明显这是一个关键的组成部分。不过,我将首先尝试使用Militric的答案,使用
    [HttpPost]
    。我仍然不知道如何处理代码背后的呼叫。我试图编写一个方法来捕获数组,但在ajax调用中不断出现错误。我已经在原始问题中添加了我的代码隐藏方法。请看这个问题。忽略关于返回内容的部分,看看他们是如何构建
    url
    的。感谢链接,我得到了正确发布的电话——我从电话中收到了
    success
    。但是我的方法仍然没有被调用。编辑时间在最后一条评论上用完。。。我想到了两个可能的原因。。。1) 我的代码隐藏使用
    分部类
    ,并继承基类
    System.Web.UI.UserControl
    ,而不是
    页面
    (正如我所看到的大多数[WebMethod]示例使用的那样)。UserControl基类对于类中的其他方法是必需的,我是否需要让我的WebMethod继承
    页面
    ?2) 我没有使用
    或PageMethods,我需要这些吗?这并不总是最安全的路线,我建议不要这样做。
    [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.
    }