前台代码:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="AjaxDemo.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<script language="javascript" type="text/javascript" >        
            //城市------------------------------
            function cityResult() 
            { 
                var city=document.getElementById("TextBox1");
                WebForm1.GetCityList(city.value,get_city_Result_CallBack);
            }
            
            function get_city_Result_CallBack(response)
            {
                if (response.value != null)
                {                    
                    //debugger;
                    document.getElementById("DropDownList1").style.display="block";
document.getElementById("DropDownList1").length=0;                
                var ds = response.value;
                    if(ds != null && typeof(ds) == "object" && ds.Tables != null)
                    {                    
                        for(var i=0; i<ds.Tables[0].Rows.length; i++)
                    {
                        var name=ds.Tables[0].Rows[i].city;
                      var id=ds.Tables[0].Rows[i].cityID;
                      document.getElementById("DropDownList1").options.add(new Option(name,id));
                    }
                    }
                }
                else
                {
document.getElementById("DropDownList1").style.display="none";
                }             
                return
            }
           
            function getData()
            {
                var province=document.getElementById("DropDownList1");
                var pindex = province.selectedIndex;
                var pValue = province.options[pindex].value;
                var pText  = province.options[pindex].text;                                                                document.getElementById("<%=TextBox1.ClientID%>").innerText=pText;
            }
</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<FONT face="宋体"></FONT><FONT face="宋体"></FONT>
<br>
<asp:DropDownList ID="DropDownList1" runat="server" Width="72px" Height="8px"></asp:DropDownList>
<br>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
</body>
</HTML>后台代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using AjaxPro;
using System.Data.SqlClient;namespace AjaxDemo
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.DropDownList DropDownList1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
AjaxPro.Utility.RegisterTypeForAjax(typeof(WebForm1));

if (!Page.IsPostBack)
{
this.TextBox1.Attributes["onchange"] = "javascript:cityResult()";
this.DropDownList1.Attributes.Add("OnSelectedIndexChanged", "getData();");
}
}
[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
public DataSet GetCityList(int provinceid)
{
string sql = "select * from a01 where a0101 like '%" + provinceid + "%'"; return GetDataSet(sql); }

public static DataSet GetDataSet(string sql)
{
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda = new SqlDataAdapter(sql, ConnectionString);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}Web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="database1" value="Server=.;database=database1;uid=sa;pwd=;" />
</appSettings>
    
  <system.web>
         <httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro" />
</httpHandlers>
……要求:Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中
但我一运行有出错的,那位大哥帮忙看下,最终的结果能够运行出来就行,想学习下无刷新技术

解决方案 »

  1.   

    建议不要用前台xml来生产select的option,速度有问题,毕竟ie是脚本解释
    A(Select)请求后,发出Ajax请求,后台产生B(Select)的全部html代码,由前台
    document.getElementById('B').outerHTML = htmls;
    这样快
      

  2.   

    js中怎么能用DataSet呢?你需要添加一个实体类A01。将DataSet -> A01[],然后返回给js,ajax.net会生成json对象,
    可以直接使用。
      

  3.   

    [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
    public DataSet GetCityList(int provinceid)
    {
    string sql = "select * from a01 where a0101 like '%" + provinceid + "%'"; return GetDataSet(sql); }
    改成[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
    public A01[] GetCityList(int provinceid)
    {
    string sql = "select * from a01 where a0101 like '%" + provinceid + "%'"; return ConvertDataSet2A01(GetDataSet(sql)); }
      

  4.   

    谢谢各位的回答,上面那段代码是网上下载的,
    地址:http://www.win-day.com.cn/InfoView/Article_237262.html
    目前出现的错误:
                function cityResult() 
                { 
                    var city=document.getElementById("TextBox1");
                    WebForm1.GetCityList(city.value,get_city_Result_CallBack);
                }错误:'WebForm1'未定义
    要如何处理呢,
    WebForm1.GetCityList(city.value,get_city_Result_CallBack);
    这行是否调用后台的GetCityList函数呢,但后台的GetCityList只有一个参数,要如何理解
    或者说要怎样才能使这段程序正常运行
      

  5.   

    WebForm1.GetCityList(city.value,get_city_Result_CallBack);第一个参数是你的传入参数,第二个get_city_Result_CallBack 对应的是你的aspx页面的回掉脚本函数.
      

  6.   

    给你个很简单的 检查用户名重复的例子web.config配置就不说了前台用户名:
    <asp:TextBox id="txt_UserName" runat="server" onfocus="ClearErrMsg()" onblur="CheckUser()" Width="150px"autocomplete="off"></asp:TextBox><span id="ErrMsg"></span>
    脚本
     function CheckUser()
            {
                var _usernameObj = document.getElementById("txt_UserName"); 
                var _username = _usernameObj.value;
                if (_username == null || _username == "")
                {
                    return;
                }
              
                //打开系统正忙的提示
                showBusy(true);
                SDPriceWeb.RegNetUser.Ajax_HasUser(_username,get_check_Result_CallBack);
            }
                    function get_check_Result_CallBack (response)
            {
                //关闭系统正忙的提示
                showBusy(false);
                if (response.value == true)
                {
    document.getElementById("ErrMsg").innerHTML="&nbsp;&nbsp;<img src=./Images/Err.gif >&nbsp;<font color=red>对不起,用户名重复</font>";
                }
                else
                {
    document.getElementById("ErrMsg").innerHTML=""
                }
            }后台代码====================================page load里面注册
    AjaxPro.Utility.RegisterTypeForAjax(typeof(SDPriceWeb.RegNetUser));具体后台代码
    #region 检查用户是否重名的ajax 方法 [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
    public bool Ajax_HasUser (string _UserName)
    {
    //检查用户名是否重名的 sql 语句
    string sqlstring = "select * from Tb_UsersNet where UserName = '" + _UserName + "'";
    try
    {
    DataSet ds = new DataSet();
    ds = DbHelperSQL.Query(sqlstring); if(ds.Tables[0].Rows.Count != 0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    catch
    {
    return true;
    } }
    #endregion
      

  7.   

    我的命名空间:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Text.RegularExpressions;namespace SDPriceWeb
    {
    /// <summary>
    /// RegNetUser 的摘要说明。
    /// </summary>
    public class RegNetUser : System.Web.UI.Page
    {
      

  8.   

    junzhang4008(程序可以让尸体动起来)
    在吗,可否留下即时通讯呢(QQ或者MSN),有问题向您请教
      

  9.   

    junzhang4008(程序可以让尸体动起来)
    可否给个完整的代码        [email protected]                    谢谢
      

  10.   

    非常感谢junzhang4008(程序可以让尸体动起来) 的例子
    但我还是想把数据查询出来找绑定到相关的控件,就是我上面的例子
      

  11.   

    再次感谢junzhang4008(程序可以让尸体动起来) 发的代码
      

  12.   

    对于这种自动填充的模式,
    强烈建议使用 ajax contrl toolkit 中的控件.
    非常不错
      

  13.   

    mylady(青梅竹马),我目前用的是VS2003,ajax contrl toolkit 是2003自带还是第三方控件,要如何使用,有相关的代码吗
      

  14.   

    it can't work as that.