我自学了如何使用ASP.NET,并且我试图在我的.aspx文件中调用JS函数中的C#函数。
这是我的JS部分:
<script type="text/javascript">
function Run() {
alert("Running!")
var ranking = parseInt(document.getElementById("rank").value);
var collsize = parseInt(document.getElementById("size").value);
var collsafety =
parseInt(document.getElementById("safety").value);
var best = PageMethods.Survey(ranking, collsize, collsafety);
document.write(best);
}
</script>
C#函数的签名(它嵌入在.aspx文件中,就像JS函数一样):
<script language="c#">
[System.Web.Services.WebMethod]
public static string Survey(int ranking, int collsize, int
collsafety) {
....
}
确切的错误消息是:未捕获的ReferenceError:未定义PageMethods.Survey。
我使用onclick按钮调用Run方法。我知道输入了该方法,因为第一个警报发生了。但是,当我尝试调用Survey时,我收到错误。
我已经阅读了几个答案,例如:jquery PageMethod saying the method does not exist,但建议的AJAX也没有用。我也读过这个:https://www.codeproject.com/Questions/561226/errorpluspageMethodplusisplusundefined但我无法看到我做得不对......
答案 0 :(得分:0)
由于您将c#代码直接嵌入到aspx文件中,因此您的代码将无法运行。将其嵌入到aspx.cs文件中:
protected void Page_Load(object sender, EventArgs e)
{
}
[System.Web.Services.WebMethod]
public static string Survey(int ranking, int collsize, int
collsafety)
{
return "Hello";
}
您可以通过PageMethods调用它:
<script type="text/javascript">
function Run() {
var ranking = 123;
var collsize = 123;
PageMethods.Survey(ranking, collsize, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Please contact administrator.');
}
}
</script>
最后不要忘记在调用页面上添加ScriptManager(在我的示例中为Default.aspx)并启用PageMethods为True:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>
以下是进一步参考的样子:
我在按钮上调用脚本时的代码:
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="Run()" />