主要通过使用UpdatePanel这个控件来实现该功能

一个省、市、县的XML文件:


<?xml version="1.0" encoding="gb2312"?>
<Country>
  <Item id="1" pid="0" c="1">北京</Item>
  <Item id="2" pid="0" c="2">上海</Item>
  <Item id="3" pid="0" c="3">深圳</Item>
  <Item id="4" pid="0" c="4">山西</Item>
  <Item id="5" pid="0" c="5">内蒙古</Item>
  <Item id="6" pid="0" c="6">辽宁</Item>
  <Item id="7" pid="0" c="7">吉林</Item>
  <Item id="8" pid="0" c="8">黑龙江</Item>
  <Item id="9" pid="0" c="9">江苏 </Item>
  <Item id="10" pid="0" c="10">浙江 </Item>
  <Item id="11" pid="0" c="11">安徽</Item>
  <Item id="12" pid="0" c="12">福建</Item>
  <Item id="13" pid="0" c="13">江西</Item>
  <Item id="14" pid="0" c="14">山东 </Item>
  <Item id="15" pid="0" c="15">河南</Item>
  <Item id="16" pid="0" c="16">湖北</Item>
  <Item id="17" pid="0" c="17">湖南 </Item>
  <Item id="18" pid="0" c="18">广东</Item>
  <Item id="19" pid="0" c="19">广西</Item>
  <Item id="20" pid="0" c="20">海南</Item>
  <Item id="21" pid="0" c="21">重庆</Item>
  <Item id="22" pid="0" c="22">四川</Item>
  <Item id="23" pid="0" c="23">贵州</Item>
  <Item id="24" pid="0" c="24">云南 </Item>
  <Item id="25" pid="0" c="25">西藏</Item>
  <Item id="26" pid="0" c="26">陕西</Item>
  <Item id="27" pid="0" c="27">甘肃 </Item>
  <Item id="28" pid="0" c="28">青海</Item>
  <Item id="29" pid="0" c="29">宁夏</Item>
  <Item id="30" pid="0" c="30">新疆</Item>
  <Item id="31" pid="0" c="31">台湾</Ite>
  <Item id="32" pid="0" c="32">澳门</Item>
  <Item id="33" pid="0" c="33">香港</Item>
  <Item id="34" pid="24" c="34">迪庆藏族自治州</Item>
  <Item id="35" pid="34" c="35">维西傈族自治县</Item>
  <Item id="36" pid="34" c="36">德钦县</Item>
</Country>




在要处理的ASPX页面中加入如下代码:


<body>
    <form id="Form1" runat="server">
        <asp:ScriptManager ID="styleScriptManager" runat="server"></asp:ScriptManager>






                    <div class="divTr">
                        <div class="td_title">所在区域:</div>
                        <div class="td_value">
                            <asp:UpdatePanel ID="updatePanel2" runat="server" UpdateMode="conditional">
                                <Triggers>
                                    <asp:AsyncPostBackTrigger ControlID="Btn_SaveBlogInfo" EventName="Click" />
                                </Triggers>
                                <ContentTemplate>
                                    <asp:DropDownList ID="Dp_Providence" runat="server" ToolTip="选择省份" OnSelectedIndexChanged="Dp_Providence_OnSelectedIndexChanged"
                                        AutoPostBack="true">
                                    </asp:DropDownList>
                                    <asp:DropDownList ID="Dp_City" runat="server" ToolTip="选择省份">
                                        <asp:ListItem Value="" Text="=请选择="></asp:ListItem>
                                    </asp:DropDownList>                                 
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </div>
                    </div>




在aspx.cs文件中加入


    /// <summary>
    /// 省份下拉对象更改值事件
    /// </summary>
    /// <remarks>查找属于该省份下的所有城市</remarks>
    protected void Dp_Providence_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        int selectIndex = this.Dp_Providence.SelectedIndex;
        if (selectIndex != -1)
        {
            string provinceId = this.Dp_Providence.SelectedItem.Value;
            BindCityToDropDownList(provinceId);
        }
    }

    /// <summary>
    /// 绑定省份到Dp_Providence用户控件中
    /// </summary>
    private void BindProvinceToDropDownList()
    {
        BindCollectionToDropDownList(Dp_Providence, AreaXmlHelper.Province());
    }

    /// <summary>
    /// 绑定列出来的省份所包含的所有城市
    /// </summary>
    /// <param name="provinceId">目标省份ID号</param>
    private void BindCityToDropDownList(string provinceId)
    {
        System.Collections.Specialized.HybridDictionary resultDictionary = AreaXmlHelper.City(provinceId);
        if (resultDictionary.Count > 0)
        {
            BindCollectionToDropDownList(Dp_City, resultDictionary);
        }
    }

    /// <summary>
    /// 绑定字典集合数据到目标DropDownList用户控件上
    /// </summary>
    /// <param name="dropDownList">目标DrowDownList用户控件</param>
    /// <param name="dictionary">字典集合数据</param>
    private void BindCollectionToDropDownList(DropDownList dropDownList, System.Collections.Specialized.HybridDictionary dictionary)
    {
        if (dropDownList != null)
        {
            dropDownList.DataSource = dictionary;
            dropDownList.DataTextField = "value";
            dropDownList.DataValueField = "key";
            dropDownList.DataBind();
        }
    }




AreaXmlHelper.cs


using System;
using System.Xml;
using System.IO;
using System.Collections.Specialized;

/// <summary>
/// AreaXmlHelper 的摘要说明
/// </summary>
public sealed class AreaXmlHelper
{

    /// <summary>
    /// 获取省份列表
    /// </summary>
    /// <returns>返回省份列表</returns>
    public static HybridDictionary Province()
    {
        return Province("");
    }

    /// <summary>
    /// 获取省份列表
    /// </summary>
    /// <param name="xmlFilePath">存放地区信息的XML文件路径</param>
    /// <returns>返回省份列表</returns>
    public static HybridDictionary Province(string xmlFilePath)
    {
        return EnumerateAreaList(xmlFilePath, "");
    }

    /// <summary>
    /// 获取目标省份所对应的城市列表
    /// </summary>
    /// <param name="provinceId">目标省份城市代码号</param>
    /// <returns>返回目标省份所对应的城市列表</returns>
    public static HybridDictionary City(string provinceId)
    {
        return City("", provinceId);
    }

    /// <summary>
    /// 获取目标省份所对应的城市列表
    /// </summary>
    /// <param name="xmlFilePath">存放地区信息的XML文件路径</param>
    /// <param name="provinceId">目标省份城市代码号</param>
    /// <returns>返回目标省份所对应的城市列表</returns>
    public static HybridDictionary City(string xmlFilePath, string provinceId)
    {
        return EnumerateAreaList(xmlFilePath, provinceId);
    }

    /// <summary>
    /// 遍历所有的符合条件的地区信息列表
    /// </summary>
    /// <param name="xmlFilePath">存放地区信息的XML文件路径</param>
    /// <param name="areaId">目标地区代码号</param>
    /// <returns>返回遍历所有的符合条件的地区信息列表</returns>
    private static HybridDictionary EnumerateAreaList(string xmlFilePath, string areaId)
    {
        if (string.IsNullOrEmpty(xmlFilePath))
        {
            xmlFilePath = skzx.Core.PageCtrl.Request.ApplicationPath + "/AreaList.xml";
        }
        string phyXmlPath = skzx.Core.PageCtrl.Server.MapPath(xmlFilePath);
        if (string.IsNullOrEmpty(areaId)) areaId = "0";
        HybridDictionary provinceDictionary = new HybridDictionary(true);
        provinceDictionary.Clear();
        if (File.Exists(phyXmlPath))
        {
            try
            {
                XmlTextReader reader = new XmlTextReader(phyXmlPath);
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                XmlElement root = doc.DocumentElement;
                string xpath = string.Format("Item[@pid={0}]", areaId);
                XmlNodeList list = root.SelectNodes(xpath);
                foreach (XmlElement element in list)
                    if (!provinceDictionary.Contains(element.GetAttribute("id")))
                        provinceDictionary.Add(element.GetAttribute("id"), element.InnerText);  //key = code, value = text
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.InnerException.Message);
            }
        }
        return provinceDictionary;
    }
}