2010-03-29 92 views
4

我可以從服務器端使用靜態接收callbackresult方法從服務器端獲取對象。通過客戶端功能在服務器端調用非靜態方法

但我想在我的頁面中運行非靜態方法,通過調用客戶端函數來填充ajax手風琴。

我從服務器端調用的對象是一個複雜的對象,我不能在客戶端使用,如果我通過回調結果得到它。

是否有任何其他解決方案,我可以在客戶端控件的aspx文件中運行非靜態方法?

代碼我使用至今...

 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); 
} 

回答

0

是的,你需要創建一個處理程序,將創建所需頁面的整個背景下,這將運行一個完整的頁面生命週期ECT,和當你想要檢索像用戶控件或大的東西時,更推薦使用它。

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; 
     } 
    } 

,但我認爲它不是你所需要的,而不是我會建議你做一個實體(類)來處理,將不再需要任何的HttpContext,並從一個簡單的處理器運行它插入功能。

您可能需要的另一種解決方案,因爲也許您確實需要所有回發信息,但不希望進行完整回發則是使用AjaxPanel或甚至清除響應併發送「確定」。

相關問題