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

如果我点击“保存”按钮,我想执行一个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;
}但是它给出了以下错误...

发布于 2011-07-26 13:36:17
不能在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)。
https://stackoverflow.com/questions/6825461
复制相似问题