PageMethods и UpdatePanel - PullRequest
       33

PageMethods и UpdatePanel

6 голосов
/ 26 июля 2011

У меня есть следующая иерархия страниц

enter image description here

Я хочу выполнить PageMethod, если я нажму кнопку «Сохранить», поэтому я закодировал, как показано ниже

При нажатии кнопки Я позвонил

OnClientClick="return btnSaveAS_Clicked()"

Вызвал следующее на PageLoad внутреннего пользовательского элемента управления

private void RegisterJavaScript()
{
    StringBuilder jScript = new StringBuilder();
    jScript.Append("<script type='text/javascript'>");
    jScript.Append(@"function btnSaveAS_Clicked() {
        var txtConditionName = document.getElementById('" + txtConditionName.ClientID + @"').value;
        PageMethods.Combine('hello','world', OnSuccess);
        function onSuccess(result)
        {
            alert(result);
        }
    }");
    jScript.Append("</script>");

    Page.ClientScript.RegisterStartupScript(this.GetType(), "conditions_key", jScript.ToString());
}

Метод кодированной страницы как

[WebMethod]
public static string Combine(string s1, string s2) {
  return s1 + "," + s2;
}

Новыдает следующую ошибку ...

enter image description here

1 Ответ

4 голосов
/ 26 июля 2011

Вы не можете определить методы страницы на страницах ascx.Вы должны определить их в своей веб-форме.Если вы хотите, чтобы метод страницы был определен в вашем пользовательском элементе управления, вам нужно определить метод перенаправления страницы на странице aspx, как показано ниже ( source ):

в пользовательском управлении:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string MyUserControlPageMethod()
{
    return "Hello from MyUserControlPageMethod";
}  

на странице aspx.cs:

[WebMethod]
[ScriptMethod]
public static string ForwardingToUserControlMethod()
{
    return WebUserControl.MyUserControlMethod();
}  

и на странице aspx:

 function CallUserControlPageMethod()
 {
     PageMethods.ForwardingToUserControlPageMethod(callbackFunction);           
 }  

В качестве альтернативы вы можете использоватьСлужбы ASMX и jquery ajax-методы ( jQuery.ajax , jQuery.get , jQuery.post ) для асинхронного вызова ваших методов ( sample *)1024 *).

Другой вариант - определить обработчики http и также вызывать их через jQuery ( tutorial ).

...