使用ajax向代码隐藏(c#)发送javascript数组
我对C#和javascript有点陌生,所以虽然我的问题很具体,但我愿意接受任何替代方案 我有一个值数组(我在javascript函数中创建的),我希望将其发送到代码隐藏文件,以便在方法中使用。从我所研究的使用ajax和使用JSON字符串化数组似乎是最好的方法 我的问题是使用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
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.
}