我花了一整天的时间来解决这个错误并阅读了几乎每篇文章,并尝试了我发现的每一个提示,但仍然无法使其工作。
请注意:在ScriptManager中, EnablePageMethod = true,方法是公共的和静态的,并使用[WebMethods]
进行修饰相同的编码与VS2010完美配合,在VS2013中使用空项目,但在使用新项目时 - >网络 - >网页表单输出附在此处供您参考。
这是我的代码。
代码背后:
[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
return "Hello " + name + Environment.NewLine + "The Current Time is: "
+ DateTime.Now.ToString();
}
JavaScript的:
<script type="text/javascript">
function ShowCurrentTime() {
PageMethods.GetCurrentTime(document.getElementById("<%=txtUserName.ClientID%>").value, OnSuccess);
}
function OnSuccess(response, userContext, methodName) {
alert(response);
}
</script>
HTML:
<div>
Your Name :
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<input id="btnGetTime" type="button" value="Show Current Time" onclick="ShowCurrentTime()" />
</div>
答案 0 :(得分:0)
尝试将[System.Web.Services.WebMethod]
和[System.Web.Script.Services.ScriptMethod]
添加到服务器端GetCurrentTime
方法。
还要确保您的脚本管理器具有EnablePageMethods="True"
。您的问题表明您设置错误拼写的 EnablePageMethod = true (应该是复数形式)。
答案 1 :(得分:0)
您需要使Click事件处理程序失败,以防止回发/页面提交。
只需从您的javascript函数返回false:
function ShowCurrentTime() {
PageMethods.GetCurrentTime(document.getElementById("<%=txtUserName.ClientID%>").value, OnSuccess);
return false; // added
}
答案 2 :(得分:0)
从客户端调用PageMethod时,您必须确保该按钮不会回发。使用您当前的标记,它将回发并导致意外的效果。
您应该使用以下标记作为按钮,因此它永远不会回发。然后调用pagemethod应该工作。在下面的标记中,按钮单击事件返回一个错误值,因此页面永远不会被提交,即返回。
此外,最好全部发布您的页面标记,因为标记可能存在问题。
<input id="btnGetTime" type="button" value="Show Current Time"
onclick="ShowCurrentTime();return false;" />