首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PageMethods和UpdatePanel

PageMethods和UpdatePanel
EN

Stack Overflow用户
提问于 2011-07-26 13:02:23
回答 1查看 2K关注 0票数 6

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

如果我点击“保存”按钮,我想执行一个PageMethod,所以我编写了如下代码

单击按钮时,我调用了

代码语言:javascript
复制
OnClientClick="return btnSaveAS_Clicked()"

在内部用户控件的PageLoad上调用以下函数

代码语言:javascript
复制
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());
}

编码的页面方法为

代码语言:javascript
复制
[WebMethod]
public static string Combine(string s1, string s2) {
  return s1 + "," + s2;
}

但是它给出了以下错误...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-26 13:36:17

不能在ascx页中定义页方法。你必须在你的web表单中定义它们。如果你想在你的用户控件中定义一个页面方法,你必须在你的aspx页面中定义一个转发页面方法,如下所示(source):

在用户控件中:

代码语言:javascript
复制
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string MyUserControlPageMethod()
{
    return "Hello from MyUserControlPageMethod";
}  

在aspx.cs页面中:

代码语言:javascript
复制
[WebMethod]
[ScriptMethod]
public static string ForwardingToUserControlMethod()
{
    return WebUserControl.MyUserControlMethod();
}  

在aspx页面中:

代码语言:javascript
复制
 function CallUserControlPageMethod()
 {
     PageMethods.ForwardingToUserControlPageMethod(callbackFunction);           
 }  

或者,您可以使用ASMX服务和jquery ajax方法(jQuery.ajaxjQuery.getjQuery.post)异步调用您的方法(sample)。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6825461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档