2010-03-29 91 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或甚至清除响应并发送“确定”。

相关问题