最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Sending a javascript array to code behind(c#) using ajax - Stack Overflow

programmeradmin0浏览0评论

I'm a bit new to C# and javascript so while my question is specific I am open to any alternatives.

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. From what I've researched using ajax and stringifying the array with JSON seems like the best method.

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

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?

Here is what I'm using on my code-behind file

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

I'm a bit new to C# and javascript so while my question is specific I am open to any alternatives.

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. From what I've researched using ajax and stringifying the array with JSON seems like the best method.

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

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?

Here is what I'm using on my code-behind file

[WebMethod]
public static void done(string[] ids)
{
String[] a = ids;
}
Share Improve this question edited Jul 6, 2012 at 18:39 David East 32.6k6 gold badges69 silver badges83 bronze badges asked Jun 20, 2012 at 16:02 Matt Foxx DuncanMatt Foxx Duncan 2,0943 gold badges23 silver badges40 bronze badges 7
  • Thanks! After fleshing out my question it's become clear that this is a crucial component. I'm going to try and use Milimetric's answer using [HttpPost] first though. – Matt Foxx Duncan Commented Jun 20, 2012 at 16:16
  • I still don't know how to handle the call on the code-behind side. I tried writing a method to capture the array but I keep getting an error with the ajax call. I've added my code-behind method to the original question – Matt Foxx Duncan Commented Jun 20, 2012 at 17:51
  • Take a look at this question Jquery AJAX with ASP.NET WebMethod Returning Entire Page. Ignore the part about returning stuff and look at how they are constructing the url. – Roman Commented Jun 20, 2012 at 18:48
  • Thanks for the link, I got the call to post properly -- I am receiving success back from the call. However my method is still not being invoked. – Matt Foxx Duncan Commented Jun 20, 2012 at 19:02
  • Edit time ran out on last comment... Two possible reasons I've come up with... 1) My code-behind uses a partial class and inherits the base class System.Web.UI.UserControl rather than Page(as I've seen most [WebMethod] example use). The UserControl base class is necessary for other methods in the class, do I need to have my WebMethod inherit Page? 2) I'm not use <asp:ScriptManager> or PageMethods, do I need these? – Matt Foxx Duncan Commented Jun 20, 2012 at 19:10
 |  Show 2 more comments

3 Answers 3

Reset to default 8

I have written a in-depth example for this using ASP.NET MVC, but it can easily be adapted for WebForms.

Send data with jquery to an MVC controller

The HTML and jQuery will look almost exactly the same, with the exception of where you call the 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.

<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]
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. 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. There's no need to stringify, jQuery will figure out what to do. 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/

For calling [WebMethod] methods from web pages or web services, check out this guide:

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

Basically though you need the url to be ServicePage.aspx/MethodName

Put your data in a hidden field with runat=server. Post the form and fetch the data normally.

发布评论

评论列表(0)

  1. 暂无评论