我是想做一个省市地区的三级无刷新联动,在网上下了个例子,不能实现:附上代码:<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false" CodeFile="Default6.aspx.cs" Inherits="Default6" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--更新日期2010-6-7-->
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title>AjaxTest </title> 
    <script language="javascript" type="text/javascript">
    
    //绑定City 
    function BindToCity(ProvinceID,DDL_City_ID) 
    { 
        var DataSet_City = Default6.GetCityData(ProvinceID).Value;//注意加Value
        var DDL_City = document.getElementById(DDL_City_ID);
        DDL_City.length = 0;//清除已有选项 
        DDL_City.options.add(new Option("--请选择--",0));
        var Length = DataSet_City.Rows.Length; 
        if(Length!=0) 
        {        document.getElementById(DDL_City_ID).style.display="block";
        document.getElementById("Area").style.display="none";            for(var i=0;i <Length;i++) 
            { 
                var Text = DataSet_City.Rows[i].Text;//必须和DataSet的列名一致 
                var Value = DataSet_City.Rows[i].Value; 
                DDL_City.options.add(new Option(Text,Value));
            } 
        } 
        else 
        { 
                   document.getElementById(DDL_City_ID).style.display="none";
        document.getElementById("Area").style.display="none";   }; 
        return;
    } 
    
    //绑定Area 
    function BindToArea(CityID,DDL_Area_ID) 
    { 
        var DataSet_Area = Default6.GetAreaData(CityID).value; 
        var DDL_Area = document.getElementById(DDL_Area_ID); 
        DDL_Area.length = 0; 
        var Length = DataSet_Area.Rows.length; if(Length!=0){
        for(var i=0;i <Length;i++) 
        { 
            var Text = DataSet_Area.Rows[i].Text; 
            var Value = DataSet_Area.Rows[i].Value; 
            DDL_Area.options.add(new Option(Text,Value)); 
        }; }else{document.getElementById(DDL_Area_ID).style.display="none";}
        return;
    }    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div>请选择您所在的省: 
        <asp:DropDownList ID="Province" runat="server" >        
        </asp:DropDownList> 
        
        请选择您所在的市: 
        <asp:DropDownList ID="City" runat="server">        
        </asp:DropDownList> 
        
        请选择您所在的区: 
        <asp:DropDownList ID="Area" runat="server"> 
        </asp:DropDownList> 
    </div> 
    </form> 
</body> 
</html>
cs:using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default6 : System.Web.UI.Page
{    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(Default6), this);
        this.BindToDDL();
    }    public DataSet GetDS(string SQL)
    {
        SqlConnection conn = new SqlConnection("server=WWW-74C6CBFEF43;database=tdata;uid=sa;pwd=sasa");        conn.Open();
        SqlDataAdapter Ada = new SqlDataAdapter(SQL, conn);
       DataSet ds = new DataSet();
        try
        {
           Ada.Fill(ds);
           conn.Close();
           return ds;        }
        catch
        {
           throw;
        }    }
    /**/
    /// <summary>
    /// //数据绑定
    /// </summary>    //绑定Province,并添加事件。 
    private void BindToDDL()
    {
        string SQLSelect_Province = @"select * from province ";
        this.Province.DataSource = GetDS(SQLSelect_Province);
        this.Province.DataTextField = "province";
        this.Province.DataValueField = "provinceID";
        this.Province.DataBind();
        this.Province.Items.Insert(0, "--不限--");
        //this.Province.Items.Insert(0, new ListItem("--不限--","-1"));        //在事件onchange上添加函数BindTo×××,也可以添加在onclick事件上
        this.Province.Attributes.Add("onchange", "BindToCity(this.options[selectedIndex].value,'City');");        this.City.Attributes.Add("onchange", "BindToArea(this.options[selectedIndex].value,'Area');");    }    //根据省ID查询相应的城市 
    [AjaxPro.AjaxMethod]
    public DataSet GetCityData(string ProvinceID)
    {        string SQLSelect_City = @"select city as Text,cityid as Value from city where father='" + ProvinceID + "'";
        Response.Write(SQLSelect_City.ToString());
        return GetDS(SQLSelect_City);
    }    //根据城市ID查询相应的区域 
    [AjaxPro.AjaxMethod]
    public DataSet GetAreaData(string CityID)
    {
        string SQLSelect_Area = @"select area as Text,areaid as Value from area where father='" + CityID + "'";
        return GetDS(SQLSelect_Area);
    }}
运行时错误 当 "省"的下拉列表change时
网页错误详细信息消息: 'Rows' 为空或不是对象
行: 17
字符: 9
代码: 0
URI: http://localhost:2440/WebSite3/Default6.aspx

解决方案 »

  1.   

    另外 最开始的时候 cs代码中的  //根据省ID查询相应的城市 
        [AjaxPro.AjaxMethod]
        public DataSet GetCityData(string ProvinceID)
        {        string SQLSelect_City = @"select city as Text,cityid as Value from city where father='" + ProvinceID + "'";
            Response.Write(SQLSelect_City.ToString());
            return GetDS(SQLSelect_City);
        }    //根据城市ID查询相应的区域 
        [AjaxPro.AjaxMethod]
        public DataSet GetAreaData(string CityID)
        {
            string SQLSelect_Area = @"select area as Text,areaid as Value from area where father='" + CityID + "'";
            return GetDS(SQLSelect_Area);
        }}
    两个public dataset 都是 public datatable  
    但是运行的时候出现错误:CS0029: 无法将类型“System.Data.DataSet”隐式转换为“System.Data.DataTable”于是我改成了dataset 但却出现1楼的错误 .
      

  2.   

    .net是可以在js文件中对js代码进行debug的,建议你debug一下试试,还有这种ajax方式我没见过,可能ajax请求没有发送成功,建议看看DataSet_City到底是个什么类型。
      

  3.   

    据我个人推测应该是DataSet_City.tables[0].Rows.Length 也许能够解决你得问题
      

  4.   

    JS 和 c# 混用  JS 你都没弄明白是怎么回事 在JS里可以返回DATASET? 既然没有DATASET这个类型 也不会有ROWS 认识错误!