简体   繁体   English

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

[英]Sending a javascript array to code behind(c#) using ajax

I'm a bit new to C# and javascript so while my question is specific I am open to any alternatives. 我对C#和javascript有点新意,所以虽然我的问题是具体的,但我对任何替代方案持开放态度。

I have an array of values (that I have created in a javascript function) that I want to send to my code-behind file to be used in a method. 我有一个值数组(我在javascript函数中创建),我想发送到我的代码隐藏文件,以便在方法中使用。 From what I've researched using ajax and stringifying the array with JSON seems like the best method. 从我使用ajax研究并使用JSON对数组进行字符串化似乎是最好的方法。

My questions are 我的问题是

  1. Can I pass the array using this method? 我可以使用这种方法传递数组吗?

  2. How do I capture the information on the server side(in my code-behind?) 如何捕获服务器端的信息(在我的代码隐藏中?)

Javascript passing the values Javascript传递值

var jsonvalues = JSON.stringify(values);
var callback = window.location.href
$.ajax({
  url: callback
  type: "POST",
  contentType: 'application/json',
  data: jsonvalues
});

I've seen many solutions using [WebMethod] or some kind of WebService to capture the data, can I use this to do work in my code-behind file without having to return data? 我已经看到很多使用[WebMethod]或某种WebService来捕获数据的解决方案,我可以使用它在我的代码隐藏文件中工作而不必返回数据吗?

Here is what I'm using on my code-behind file 这是我在代码隐藏文件中使用的内容

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

I have written a in-depth example for this using ASP.NET MVC, but it can easily be adapted for WebForms. 我使用ASP.NET MVC为此编写了一个深入的示例,但它可以很容易地适用于WebForms。

Send data with jquery to an MVC controller 使用jquery将数据发送到MVC控制器

The HTML and jQuery will look almost exactly the same, with the exception of where you call the WebMethod. HTML和jQuery看起来几乎完全相同,除了你调用WebMethod的地方。

If the page you are using is called Default.aspx , and the method is called Done , then your URL for the WebMethod will be Default.aspx/Done . 如果您使用的页面名为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>

Your WebMethod will still be the same. 您的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.
}

The easiest way is to use ASP.NET MVC and data bind to a list. 最简单的方法是使用ASP.NET MVC和数据绑定到列表。 So for a list of strings, this would be very easy. 因此,对于字符串列表,这将非常容易。 Just make a controller action that looks like this: 只需执行如下所示的控制器操作:

[HttpPost]
public ActionResult MyAction(string[] values)
{
    ... debug and see that values gets set to your array from javascript ...
}

and then pass data: values in your $.ajax call. 然后传递data: values $.ajax调用中的data: values There's no need to stringify, jQuery will figure out what to do. 没有必要进行字符串化,jQuery会弄清楚要做什么。 For more complicated list bindings, check this out (and many other resources like it talking about fancy ways to bind to complex object lists): 对于更复杂的列表绑定,请检查一下(以及许多其他资源,例如它讨论绑定到复杂对象列表的奇特方法):

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

For calling [WebMethod] methods from web pages or web services, check out this guide: 要从网页或Web服务调用[WebMethod]方法,请查看本指南:

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

Basically though you need the url to be ServicePage.aspx/MethodName 基本上,虽然您需要url是ServicePage.aspx/MethodName

Put your data in a hidden field with runat=server. 使用runat = server将数据放在隐藏字段中。 Post the form and fetch the data normally. 发布表单并正常获取数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM