使用ajax将javascript数组发送到代码后面(c#)

Posted

技术标签:

【中文标题】使用ajax将javascript数组发送到代码后面(c#)【英文标题】:Sending a javascript array to code behind(c#) using ajax 【发布时间】:2012-06-22 19:48:07 【问题描述】:

我对 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] 或某种 WebService 来捕获数据的解决方案,我可以使用它在我的代码隐藏文件中进行工作而无需返回数据吗?

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

[WebMethod]
public static void done(string[] ids)

String[] a = ids;

【问题讨论】:

谢谢!在充实了我的问题之后,很明显这是一个至关重要的组成部分。不过,我将首先尝试使用 [HttpPost] 使用 Milimetric 的答案。 我仍然不知道如何处理代码隐藏端的调用。我尝试编写一种方法来捕获数组,但我不断收到 ajax 调用错误。我已将代码隐藏方法添加到原始问题中 看看这个问题Jquery AJAX with ASP.NET WebMethod Returning Entire Page。忽略关于退货的部分,看看他们是如何构建url的。 感谢您的链接,我接到了正确发帖的电话——我收到了来自电话的success。但是我的方法仍然没有被调用。 最后一条评论的编辑时间用完了......我想出了两个可能的原因...... 1)我的代码隐藏使用partial class并继承基类System.Web.UI.UserControl而不是比Page(正如我看到的大多数 [WebMethod] 示例使用)。 UserControl 基类对于类中的其他方法是必需的,我是否需要让我的 WebMethod 继承 Page? 2) 我没有使用<asp:ScriptManager> 或PageMethods,我需要这些吗? 【参考方案1】:

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

Send data with jquery to an MVC controller

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>

您的WebMethod 仍将是相同的。

[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】:

最简单的方法是使用 ASP.NET MVC 并将数据绑定到一个列表。因此,对于字符串列表,这将非常容易。只需制作一个如下所示的控制器操作:

[HttpPost]
public ActionResult MyAction(string[] values)

    ... debug and see that values gets set to your array from javascript ...

然后在您的$.ajax 调用中传递data: values。不需要字符串化,jQuery 会弄清楚该怎么做。对于更复杂的列表绑定,请查看这个(以及许多其他类似的资源,它们都在谈论绑定到复杂对象列表的奇特方法):

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

要从网页或网络服务调用 [WebMethod] 方法,请查看本指南:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

虽然您需要将网址设为ServicePage.aspx/MethodName

【讨论】:

那我还需要在$.ajax 调用中指定内容类型吗?我应该使用processData:false 进行通话吗? 我通常绑定强类型的东西,所以我设置表单并发布它们。就我而言,我什至不需要使用 $.ajax,我只需要使用 $.post。这是我能给你的最好建议。设置它,并在上面显示的控制器操作中放置一个断点。然后,查看 Request 对象并查看传入了哪些参数。基本上,您希望名为“values”的参数有一个逗号分隔的列表。然后,您可以根据您的需要定制您的 jQuery。 感谢您的帮助!但是我刚刚发现我正在构建的平台(Sitecore)尚不支持 MVC(该版本将在本月底发布)我正在尝试使用 @R0MANARMY 提到的 [WebMethod] 代替这但无法让我的ajax 调用来触发我编写的方法。我已将 ajax 调用修改为 url:'Register/trigger',其中 trigger 是我的回调中的方法。我错过了什么吗?再次感谢所有帮助! 我会用这个来编辑我的答案,但我认为如果您使用的是页面,则需要url: 'Register.aspx/trigger'.asmx 如果您使用的是老式服务。查看更多信息:encosia.com/…【参考方案3】:

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

【讨论】:

这并不总是最安全的路线,我建议不要这样做。

以上是关于使用ajax将javascript数组发送到代码后面(c#)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ajax将数据从视图发送到控制器laravel?

如何使用 jQuery $.ajax 将请求参数数组发送到 servlet?

将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

如何使用 PHP 和 Ajax 将数组传递给 Javascript?

将 PHP $_POST 数组传递给 javascript/jQuery 以通过 ajax 发送回 PHP

jquery ajax后混合数组对象将空数组发送到php