2010-03-29 2 views
4

Je peux obtenir un objet du côté serveur en utilisant des méthodes de réception de rappel callback statique côté serveur.Appel d'une méthode non statique côté serveur par une fonction côté client

Mais je veux exécuter une méthode non statique dans ma page qui remplit un accordéon ajax en appelant une fonction côté client.

L'objet que j'appelle côté serveur est un objet complexe que je ne peux pas utiliser du côté client si je l'obtiens par callbackresults.

Y at-il une autre solution que je peux exécuter une méthode non statique dans un fichier ASPX par un contrôle côté client?

Codes J'utilise jusqu'à présent ...

 function ReceiveServerData(arg, context) { 
    //Message.innerText = "Date from server: " + arg; 
} 

#region ICallbackEventHandler Members 

public void RaiseCallbackEvent(String eventArgument) 
{ 
    // Processes a callback event on the server using the event 
    // argument from the client. 
    Insert(); // this is running, but doesnt work ! 
    //printAlternativesFromAirport(eventArgument); 
} 

public string GetCallbackResult() 
{ 
    // Returns the results of a callback event to the client. 
return null; 
} 

#endregion 


protected void Page_Load(object sender, EventArgs e) 
{ 
    ClientScriptManager cm = Page.ClientScript; 
    String cbReference = cm.GetCallbackEventReference(this, "arg", 
     "ReceiveServerData", ""); 
    String callbackScript = "function CallServer(arg, context) {" + 
     cbReference + "; }"; 
    cm.RegisterClientScriptBlock(this.GetType(), 
     "CallServer", callbackScript, true); 
} 

Répondre

0

oui, vous devez créer un gestionnaire qui va créer l'ensemble du contexte nécessaire à la page, qui se déroulera un cycle de vie pleine page ect, et est plus recommandé lorsque vous voulez récupérer quelque chose comme un contrôle utilisateur ou quelque chose de grand.

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Write(RenderView("~/_controltemplates/15/myDir/Templates/myUC.ascx")); 
    } 

    public static string RenderView(string path) 
    { 
     try 
     { 
      Page pageHolder = new Page(); 
      UserControl viewControl = (UserControl)pageHolder.LoadControl(path); 
      pageHolder.Controls.Add(viewControl); 
      StringWriter result = new StringWriter(); 
      Log.Application.Debug(LOGPREFIX + "RenderView before Execute"); 
      HttpContext.Current.Server.Execute(pageHolder, result, true); 
      return result.ToString(); 
     } 
     catch (Exception ex) 
     { 
      Log.Application.ErrorException(LOGPREFIX, ex); 
      throw; 
     } 
    } 

mais je pense que ce n'est pas ce que vous avez besoin, au lieu que je vous conseille de faire une entité (classe) pour gérer cette fonction d'insertion qui ne nécessite pas HttpContext et l'exécuter à partir d'un gestionnaire simple.

une autre solution que vous pourriez avoir besoin, puisque vous ne peut-être besoin de toutes les informations postback mais ne veulent pas faire un postback complet est d'utiliser AjaxPanel ou même clairement la réponse et envoyer « OK » à la place.

Questions connexes