我有一个页面层次结构,如下所示
如果我点击“保存”按钮,我想执行一个PageMethod,所以我编码如下
OnClientClick="return btnSaveAS_Clicked()"
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;
}
但它会出现以下错误......
答案 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.ajax,jQuery.get,jQuery.post)来异步调用您的方法(sample)。
另一种选择是定义http处理程序并通过jQuery调用它们(tutorial)。