PageMethods 和 UpdatePanel

Posted

技术标签:

【中文标题】PageMethods 和 UpdatePanel【英文标题】:PageMethods and UpdatePanel 【发布时间】:2011-10-13 02:50:59 【问题描述】:

我有一个如下的页面层次结构

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

On Button Click 我调用了

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;

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

【问题讨论】:

那么这里的 UpdatePanel 因素在哪里? @jcolebrand :更新面板位于“页面”中。在“页面”中,我有一个下拉列表,根据我将加载用户控件的选择。 Page 方法在哪里?页面还是在 UserControl 中? 【参考方案1】:

您不能在 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.ajax、jQuery.get、jQuery.post)异步调用您的方法(sample)。

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

【讨论】:

哦,我完全错过了 .ascx 中定义的内容,干得好。或者,他可以使用 ASMX 来托管 web 方法。 好点。定义 http 处理程序并通过 jquery.ajax 调用它是我的最佳实践。 @Kamyar , : 如果我使用“转发页面方法”,会降低性能吗? @jcolebrand , : 如果我使用“转发页面方法”,会降低性能吗? @mraufk:取决于你如何定义performance degrading。但总的来说,我认为这不会导致任何相当大的性能问题。在大多数情况下,开销是完全可以忽略的,因为它位于服务器端,而不是客户端。

以上是关于PageMethods 和 UpdatePanel的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以进行同步 PageMethods 调用?

Pagemethods得到缓存

将Javascript PageMethods“返回值”存储到变量中

来自 javascript PageMethods 的自定义 C# 数据传输对象

从具有多个参数C#的PageMethods返回值后不调用成功函数

将 ASP.NET PageMethods 与 JQuery 数据表一起使用?