Asp.net 通过客户端函数在服务器端调用非静态方法
我可以使用服务器端的静态receive callbackresult方法从服务器端获取对象 但是我想在我的页面中运行一个非静态方法,通过调用客户端函数来填充ajax accordion 我从服务器端调用的对象是一个复杂的对象,如果我通过回调结果得到它,我就不能在客户端使用它 是否有其他解决方案可以通过客户端控件在aspx文件中运行非静态方法 我目前使用的代码Asp.net 通过客户端函数在服务器端调用非静态方法,asp.net,javascript,ajax,asmx,Asp.net,Javascript,Ajax,Asmx,我可以使用服务器端的静态receive callbackresult方法从服务器端获取对象 但是我想在我的页面中运行一个非静态方法,通过调用客户端函数来填充ajax accordion 我从服务器端调用的对象是一个复杂的对象,如果我通过回调结果得到它,我就不能在客户端使用它 是否有其他解决方案可以通过客户端控件在aspx文件中运行非静态方法 我目前使用的代码 function ReceiveServerData(arg, context) { //Message.inner
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);
}
是的,您需要创建一个处理程序,该处理程序将创建页面所需的整个上下文,该上下文将运行整个页面生命周期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,甚至清除响应并发送“OK”,因为您可能确实需要所有回发信息,但不想进行完整的回发