函数没有定义错误,而使用asp.net ajax

我想通过以下代码通过asp.net ajax调用Web服务

namespace MCTS70515AJAX { public static class HR { public static int GetEmployeeCount(string department) { int count = 0; switch (department) { case "Sales": count = 10; break; case "Engineering": count = 28; break; case "Marketing": count = 44; break; case "HR": count = 7; break; default: break; } return count; } } 

这是我正在渲染的aspx页面

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AJAX2.aspx.cs" Inherits="MCTS70515AJAX.AJAX2" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="HRSer.asmx" /> </Services> <Scripts> </Scripts> </asp:ScriptManager> <div> <select id="Departments" size="5"> <option value="Engineering">Engineering</option> <option value="HR">Human Resources</option> <option value="Sales">Sales</option> <option value="Marketing">Marketing</option> </select> </div> <br /> <div> <span id="employeeResults"></span> <span id="loading" style="display: none;">&nbsp;&nbsp;Loading ... </span> </div> </form> <script type="text/javascript"> var departments = null; Sys.Application.add_load(page_load); Sys.Application.add_unload(page_unload); function page_load(sender, e) { departments = $get("Departments"); $addHandler(departments, "change", departments_onchange); } function page_unload(sender, e) { $removeHandler(departments, "change", departments_onchange); } function departments_onchange(sender, e) { $get("employeeResults").innerHTML = ""; $get("loading").style.display = "block"; var selectedValue = departments.value; HRService.Getcount(selectedValue, onSuccess); } function onSuccess(result) { $get("loading").style.display = "none"; $get("employeeResults").innerHTML = "Employee count: " + result; } </script> </body> </html> 

这是我打电话的networking服务

 namespace MCTS70515AJAX { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [System.Web.Script.Services.ScriptService] public class HRService : System.Web.Services.WebService { [ScriptMethod] [WebMethod] public int Getcount(string department) { return HR.GetEmployeeCount(department); } } 

}页面呈现正常,但每当我改变列表项值,它显示JavaScript运行时错误:'HRService'是未定义的。 为什么是这样。

对不起,这么长的post….

您可以尝试使用PageMethods ,只需添加using[WebMethod]

 using System.Web.Services; public static class HR { [WebMethod] public static int GetEmployeeCount(string department) { int count = 0; ... return count; } } 

在你的aspx像这样修改你的scriptManager

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager> 

那么你可以这样调用JS中的方法

 function myJS_method() { var departments = $get("Departments"); // your string value PageMethods.GetEmployeeCount(departments , onSucess, onError); function onSucess(result) { // your code when it is OK // result is the return value of your C# method } function onError(result) { alert('Error' + result); } }