我试图通过以下代码通过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运行时错误:&#39; HRService&#39;未定义。为什么会这样。
抱歉这么长的帖子......
答案 0 :(得分:0)
您可以尝试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); }
}