Вызов нестационарного метода на стороне сервера с помощью клиентской функции

Я могу получить объект со стороны сервера, используя статические методы callbackresult для приема со стороны сервера.

Но я хочу запустить нестатический метод на моей странице, который заполняет аккордеон ajax, вызывая функцию на стороне клиента.

Объект, который я вызываю со стороны сервера, является сложным объектом, который я не могу использовать на стороне клиента, если получаю его по вызову callbackresults.

Есть ли другое решение, в котором я могу запустить нестационарный метод в файле 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);
 }

Ответ 1

да, вам нужно создать обработчик, который создаст весь контекст, необходимый для страницы, на котором будет выполняться полный жизненный цикл всей страницы, и более рекомендуется, когда вы хотите получить что-то вроде пользовательского элемента управления или что-то большее.

    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 или даже очистить ответ и отправить "ОК".