2010-05-25 3 views
3

J'ai des données JQuery AJAX POSTing dans mon backend C# WebForm. Il POST à ​​une méthode WebForm chaîne statique qui renvoie une valeur, le JQuery utilise cette valeur pour modifier une URL d'image dans le code HTML. Tout va bien et dandy.Jquery + AJAX + ASP.Net + WebForms

Cependant, je voudrais étendre la fonctionnalité du code existant (bien que je ne sois pas exclu de le réécrire complètement) pour me permettre de manipuler les contrôles ASP frontaux à partir du backend C#, ce que je ne peux pas faire en raison de ladite méthode de chaîne statique agissant en tant que mon WebForm.

Est-ce que quelqu'un a des idées pour aider ma situation?

Backend

[System.Web.Services.WebMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 

JQuery/AJAX

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "myPage.aspx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

Répondre

0

Avec l'aide d'un collègue, j'ai développé une solution différente. Une structure contient les données de sortie que je désire, elle est ensuite transférée dans un tableau de chaînes, puis renvoyée via la méthode de chaîne de caractères statique. Une fois renvoyées à Jquery, les données sont poussées à l'endroit où elles doivent passer par les différents index du tableau.

frontal

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
     type: "POST", 
     url: "MyForm.aspx/MyMethod", 
     data: "{'address':'" + address.toString() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "JSON", 

     success: function (output) { 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 0); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 1); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 2); 
      }) 
      $.each(output, function (index, value) { 
       $('#imgImage').attr('src', this); 
       return (index != 3); 
      }) 
     } 

Aval

public struct TestStruct 
    { 
     public string value1; 
     public string value2; 
     public string value3; 
     public string value4; 

     public TestStruct(string value1, string value2, string value3, string value4) 
     { 
      this.value1 = value1; 
      this.value2 = value2; 
      this.value3 = value3; 
      this.value4 = value4; 
     } 
    } 

    [System.Web.Services.WebMethod] 
    public static string[] MyMethod(string address) 
    { 
     string[] returnarray = new string[4]; 
     TestStruct struct; 
     struct.value1 = ""; 
     struct.value2 = address; 
     struct.value3 = ""; 
     struct.value4 = "/Unavailable.bmp"; 

     //if fail, return default values 
       returnstring.SetValue(struct.value1, 0); 
       returnstring.SetValue(struct.value2, 1); 
       returnstring.SetValue(struct.value3, 2); 
       returnstring.SetValue(struct.value4, 3); 
       return returnstring; 

     //if succeed 
       struct.values = processed values; 
       set the values on returnstring 
       return returnstring; 
     //else 
       struct.values = other processed values; 
       set the values on returnstring 
       return returnstring; 
    } 

Maintenant, les seules questions que je reçoit le Jquery pour afficher correctement les données au client.

+0

que j'ai travaillé en remplaçant toutes mes balises ".this" par des balises ".value". – Kevin

2

postback d'une sorte est nécessaire pour traiter les commandes du serveur.

Les panneaux de mise à jour sont votre seul véritable choix pour travailler avec les commandes asp.net dans ce scénario.

Mais je suggère de trouver une autre approche - les panneaux de mise à jour sont mauvais et vous donneront des verrues. le mauvais genre.

+0

@joo - pas assez tôt. mais je ne serai jamais libre - codeplex est un grand panneau de mise à jour et j'ai plusieurs projets là-bas. sera un utilisateur/victime de panneaux de mise à jour pour l'avenir indéfini. ; - \ –

4

Utilisez un WebService. Cela vous permettra d'appeler le service avec jQuery n'importe où dans votre site Web.

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "MyService.asmx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

[WebService, ScriptService] 
public class MyService : WebService 
{ 
    [ScriptMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 
} 
+0

Un collègue m'a conseillé de rester loin de WebServices, ils ne correspondent pas vraiment à mes besoins. – Kevin

+0

Pourquoi vous ont-ils conseillé de ne pas utiliser WebServices? – jrummell

+0

Le but/l'objectif de mon application Web ne bénéficierait pas de l'utilisation d'un service Web. Je rencontrerais toujours les mêmes problèmes que je suis actuellement. J'ai cependant conçu une nouvelle solution à mon problème. J'utilise actuellement une structure pour héberger mes sorties et ensuite retourner ces sorties dans un tableau de chaînes. – Kevin