使用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#)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery $.ajax 将请求参数数组发送到 servlet?
将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url
如何使用 PHP 和 Ajax 将数组传递给 Javascript?