PageMethods和UpdatePanel

时间:2011-07-26 05:02:23

标签: javascript asp.net updatepanel pagemethods

我有一个页面层次结构,如下所示

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 个答案:

答案 0 :(得分:4)

您无法在ascx页面中定义页面方法。您必须在Web表单中定义它们。如果您想要一个在用户控件中定义的页面方法,则必须在您的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.ajaxjQuery.getjQuery.post)来异步调用您的方法(sample)。

另一种选择是定义http处理程序并通过jQuery调用它们(tutorial)。