我正在尝试通过以下代码通过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;"> 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>
这是我正在呼叫的网络服务
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’未定义。为什么是这样。
抱歉这么长的帖子....
您可以尝试PageMethods,只需添加using和[WebMethod]
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); } }