二级菜单(续)

使用AjaxControlToolkit中的CascadingDropDown进行联动。

aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="下拉框关联.WebForm3" EnableEventValidation="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <ajaxToolkit:ToolkitScriptManager EnablePartialRendering="true" runat="server" ID="ScriptManager1" />

         游戏:
        <asp:DropDownList ID="gameList" runat="server"></asp:DropDownList>
        <asp:DropDownList ID="gameServiceList" runat="server"></asp:DropDownList>

     <ajaxToolkit:CascadingDropDown
                  ID="CascadingDropDown1"
                  runat="server"
                  TargetControlID="gameList" 
                  Category="Game" 
                  PromptText="请选择一个游戏" 
                  ServicePath="GetCascadeService.asmx"
                  ServiceMethod="GetGameList" />

      <ajaxToolkit:CascadingDropDown
                                    ID="CascadingDropDown2"
                                    runat="server"
                                    TargetControlID="gameServiceList"
                                    ParentControlID="gameList"
                                    PromptText="请选择一个区服"
                                    ServiceMethod="GetGameServiceList"
                                    ServicePath="GetCascadeService.asmx"
                                    Category="GameService" />

        <asp:Button ID="Button1" runat="server" Text="Button" οnclick="Button1_Click" />
    </div>
    </form>
</body>
</html>

GetCascadeService.asmx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using AjaxControlToolkit;
using System.Data;

namespace 下拉框关联
{
    /// <summary>
    /// GetCascadeService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
     [System.Web.Script.Services.ScriptService]
    public class GetCascadeService : System.Web.Services.WebService
    {
        [WebMethod]
        public CascadingDropDownNameValue[] GetGameList(string knownCategoryValues, string category)
        {
            System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue> list = new System.Collections.Generic.List<CascadingDropDownNameValue>();
            IEnumerable<Game> Igame = GetAllGameList();
            foreach (Game game in Igame)
            {
                list.Add(new CascadingDropDownNameValue(game.Name, game.Id.ToString()));
            }
            return list.ToArray();
        }

        [WebMethod]
        public CascadingDropDownNameValue[] GetGameServiceList(string knownCategoryValues, string category)
        {
            System.Collections.Specialized.StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);//获取上一级选择的值
            System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue> list = new System.Collections.Generic.List<CascadingDropDownNameValue>();
            int serviceId;
            if(!kv.ContainsKey("Game")||!Int32.TryParse(kv["Game"],out serviceId)) return null;

            DataRow[] arrayRow = getAllGameService().Select("serviceId="+serviceId);

            foreach (DataRow row in arrayRow)
            {
                list.Add(new CascadingDropDownNameValue(row["Name"].ToString(), row["Id"].ToString()));
            }
            return list.ToArray();
        }

        #region=========↓测试数据↓====================================================================================================

        private IEnumerable<Game> GetAllGameList()
        {
            for (int i = 1; i < 11; i++)
            {
                yield return new Game
                {
                    Id = i,
                    Name = string.Format("游戏{0}", i)
                };
            }
        }

        private struct Game
        {
            public string Name { get; set; }
            public int Id { get; set; }
        }

        private DataTable getAllGameService()
        {
            System.Data.DataTable table = new System.Data.DataTable("GameServerce");
            table.Columns.Add("Id", typeof(Int32));
            table.Columns.Add("ServiceId", typeof(Int32));
            table.Columns.Add("Name", typeof(string));

            table.Rows.Add(new object[] { 1, 1, "游戏1区服1" });
            table.Rows.Add(new object[] { 2, 1, "游戏1区服2" });
            table.Rows.Add(new object[] { 3, 2, "游戏2区服1" });
            table.Rows.Add(new object[] { 4, 2, "游戏2区服2" });
            table.Rows.Add(new object[] { 5, 2, "游戏2区服3" });
            table.Rows.Add(new object[] { 6, 3, "游戏3区服1" });
            table.Rows.Add(new object[] { 7, 3, "游戏3区服2" });
            table.Rows.Add(new object[] { 8, 4, "游戏4区服1" });
            table.Rows.Add(new object[] { 9, 5, "游戏5区服1" });
            table.Rows.Add(new object[] { 10, 6, "游戏6区服1" });
            table.Rows.Add(new object[] { 11, 7, "游戏7区服1" });

            return table;

        }

        #endregion

    }

    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值