随着Jquery1.4的发布,Jquery运用越来越多了,让我们来实现以前经常用到的DropDownList无刷新联动。
先看HTML,我们引用Jquery,放两个DropDownList:
1: <style type="text/css">
2: #ddlEmployeeCars
3: {
4: display:none;
5: position:absolute;
6: top:50px;
7: left:9px;
8: }
9: </style>
10: <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
11:
12: <asp:DropDownList ID="ddlEmployee" runat="server" AppendDataBoundItems="true">
13: <asp:ListItem Text="(Please Select)" Value="0" Selected="True" />
14: </asp:DropDownList>
15: <asp:DropDownList ID="ddlEmployeeCars" runat="server">
16: </asp:DropDownList>
接着写核心的Script:
1: <script language="javascript" type="text/javascript">
2: $(function() {
3: var $ddl = $("select[name$=ddlEmployee]");
4: var $ddlCars = $("select[name$=ddlEmployeeCars]");
5: $ddl.focus();
6: $ddl.bind("change keyup", function() {
7: if ($(this).val() != "0") {
8: loadEmployeeCars($("select option:selected").val());
9: $ddlCars.fadeIn("slow");
10: } else {
11: $ddlCars.fadeOut("slow");
12: }
13: });
14: });
15:
16: function loadEmployeeCars(selectedItem) {
17: $.ajax({
18: type: "POST",
19: url: "Default.aspx/FetchEmployeeCars",
20: data: "{id: " + selectedItem + "}",
21: contentType: "application/json; charset=utf-8",
22: dataType: "json",
23: async: true,
24: success: function Success(data) {
25: printEmployeeCars(data.d);
26: }
27: });
28: }
29:
30: function printEmployeeCars(data) {
31: $("select[name$=ddlEmployeeCars] > option").remove();
32: for (var i = 0; i < data.length; i++) {
33: $("select[name$=ddlEmployeeCars]").append(
34: $("<option></option>").val(data[i].Id).html(data[i].Car)
35: );
36: }
37: }
38: </script>
非常简单,检查值是不是0,然后ajax传值到server,成功后remove掉原来的option,append新的option.
看下WebPage的code:
1: public partial class _Default : System.Web.UI.Page
2: {
3: [WebMethod]
4: public static List<EmployeeCar> FetchEmployeeCars(int id)
5: {
6: var emp = new EmployeeCar();
7: return emp.FetchEmployeeCars(id);
8: }
9:
10: protected void Page_Load(object sender, EventArgs e)
11: {
12: if (!IsPostBack)
13: {
14: var employees = new Employee();
15: ddlEmployee.DataSource = employees.FetchEmployees();
16: ddlEmployee.DataTextField = "Surname";
17: ddlEmployee.DataValueField = "Id";
18: ddlEmployee.DataBind();
19: }
20: }
21: }
我们的Datasource class:
1: public class EmployeeCar
2: {
3: public int Id { get; set; }
4: public string Car { get; set; }
5:
6: private static List<EmployeeCar> LoadData()
7: {
8: return new List<EmployeeCar>
9: {
10: new EmployeeCar {Id = 1, Car = "Ford"},
11: new EmployeeCar {Id = 1, Car = "Holden"},
12: new EmployeeCar {Id = 1, Car = "Honda"},
13: new EmployeeCar {Id = 2, Car = "Toyota"},
14: new EmployeeCar {Id = 2, Car = "General Motors"},
15: new EmployeeCar {Id = 2, Car = "Volvo"},
16: new EmployeeCar {Id = 3, Car = "Ferrari"},
17: new EmployeeCar {Id = 3, Car = "Porsche"},
18: new EmployeeCar {Id = 3, Car = "Ford2"}
19: };
20: }
21:
22: public List<EmployeeCar> FetchEmployeeCars(int id)
23: {
24: return (from p in LoadData()
25: where p.Id == id
26: select p).ToList();
27: }
28: }
29:
30: public class Employee
31: {
32: public int Id { get; set; }
33: public string GivenName { get; set; }
34: public string Surname { get; set; }
35:
36: public List<Employee> FetchEmployees()
37: {
38: return new List<Employee>
39: {
40: new Employee {Id = 1, GivenName = "Tom", Surname = "Hanks"},
41: new Employee {Id = 2, GivenName = "Hugh", Surname = "Jackman"},
42: new Employee {Id = 3, GivenName = "Petter", Surname = "Liu"}
43: };
44: }
45:
46: public Employee FetchEmployee(int id)
47: {
48: var employees = FetchEmployees();
49: return (from p in employees
50: where p.Id == id
51: select p).First();
52: }
53: }
完了。希望这篇POST对您有帮助。
Author: Petter Liu http://wintersun.cnblogs.com