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的主要内容,如果未能解决你的问题,请参考以下文章
将Javascript PageMethods“返回值”存储到变量中
来自 javascript PageMethods 的自定义 C# 数据传输对象