读书人

多谢各位.救!

发布时间: 2011-12-14 23:20:17 作者: rapoo

谢谢各位.急救!!!!!!!!!!!!
我正在面试,别人让我做一个AJAX功能的,随便让我查什么,去问谁,只要能做出来就OK解30分钟。。比如一个省份,下面有很多诚市,不用每次去从数据库读取数据,用ajax做,如何做啊。晕。好心人帮帮忙吧。谢谢了,请指点一下,以前都没用过ajax。晕了啊

[解决办法]
参考下面这个:

http://download.csdn.net/source/331627
[解决办法]

探讨


http://download.csdn.net/source/331627

[解决办法]
http://blog.csdn.net/hanhenry/archive/2007/10/16/1827482.aspx
[解决办法]
1.他给你的环境是否有ajax控件?
如果没有:.免下http://ajax.asp.net
microsoft asp.net 2.0 Ajax Extension 1.0
下安后在vs2005的工具箱中看到ajax extension 和几控件.(得安后重新vs2005)
2.如果有:
HTML:
HTML code
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>无标题页</title></head><body>    <form id="form1" runat="server">    <div>        <asp:ScriptManager ID="ScriptManager1" runat="server">        </asp:ScriptManager>        <asp:UpdatePanel ID="UpdatePanel1" runat="server">            <ContentTemplate>                <asp:DropDownList ID="list1" runat="server"  AutoPostBack ="true"                     onselectedindexchanged="list1_SelectedIndexChanged">                </asp:DropDownList>                <asp:DropDownList ID="list2" runat="server">                </asp:DropDownList>            </ContentTemplate>            <Triggers >              <asp:AsyncPostBackTrigger ControlID ="list1" EventName ="SelectedIndexChanged" />            </Triggers>                </asp:UpdatePanel>    </div>    </form></body></html>
[解决办法]
发一个给你吧..

HTML code
 
<SCRIPT LANGUAGE="JavaScript">
<!--
//以XML求取数据
//参数:
//obj,当前动作的下拉框
//fullName:要填充的下拉框
function XmlPost(obj,fullName)
{
//求取当前下拉框的值
  var svalue = obj.value;
  //定义要填充的对象
  var fullObj = document.all(fullName);
  
  //定义取值地址
  var webFileUrl = "?sortid=" + svalue;
  
  //定义返回值
  var result = "";
  
  //开始取值过程
  var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
  xmlHttp.open("POST", webFileUrl, false);
  xmlHttp.send("");
  result = xmlHttp.responseText;

  //如果有取到值,则根据格式进行拆分
  //注意如果选择了第一行"请选择"空行时,是取不到值的,因此多加了一个条件
  if(result != "" && svalue != "")
  {
  //先清空原有的值
    fullObj.length=0;
    
    //拆分值成数组
    var piArray = result.split(",");
    
    //循环数组
    for(var i=0;i <piArray.length;i++)
    {
    //再拆分成ID及名称
      var ary1 = piArray[i].toString().split("|");
      //逐一添加项
      fullObj.options.add(new Option(ary1[1].toString(),ary1[0].toString()));
    }
  }
  else
  {
    //如果没有取到值,则清空要填充的下拉框的值
    fullObj.length = 0;
    fullObj.options.add(new Option("请选择",""));
  }
}
//-->
</SCRIPT>


</HEAD>
<body>
<FONT face="宋体">
<form id="Form1" method="post" runat="server">
分类
<asp:DropDownList id="mydown1" runat="server" Width="112px"> </asp:DropDownList>
  名称
<asp:DropDownList id="mydown2" runat="server" Width="168px"> </asp:DropDownList>
</form>
</FONT>
</body>



C# code
 
/// <summary>
/// 根据SQL语句返回数据集DataTable
/// </summary>
/// <param name="sql">要产生数据集的SQL语句 </param>
/// <returns>返回DataTable </returns>
private DataTable Get_Dt(string sql)
{
//数据库连接串,本数据库为ACCESS数据库,当前在本目录的根目录下
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("data1.mdb") +";";
this.conn = new OleDbConnection(connString);
//打开数据库
this.conn.Open();

OleDbDataAdapter myAdp = new OleDbDataAdapter(sql, this.conn);
DataTable myDt = new DataTable();
try
{
//填充数据
myAdp.Fill(myDt);
//返回数据集
return(myDt);
}
catch(OleDbException ex)
{
//显示错误信息
throw ex;
}
finally
{
//关闭数据库连接
this.conn.Close();
}
}

/// <summary>
/// 页面加载
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void Page_Load(object sender, System.EventArgs e)
{
//接收参数
string sortid = this.Request.QueryString["sortid"];
//判断参数是否为空(注意:空有两种形式,一种为null,一种为空)
if(sortid + "a" != "a")
{
//如果有传递上述参数,则表示联动操作开始
this.xmlBind(sortid);
}

//在页面初次加载的时候,绑定第一/二个下拉框,第二个下拉框为所有值
//但实际上,第二个下拉框应显示空值,因为所有值可能也不少,最好只显示一个"请选择"字样
if(!this.IsPostBack)
{
this.DownBind1();
this.DownBind2();
}
}

/// <summary>
/// 返回第2个下拉框需要的值给xmlhttp
/// </summary>
/// <param name="sortid">传递的关键ID值 </param>
private void xmlBind(string sortid)
{
string mystr = "";
string sql = "select typename,typeid from class_2 where sortid = " + sortid ;
DataTable mytab = this.Get_Dt(sql);

//将取到的值形成: ID|名称,ID|名称...这样的形式
if(mytab.Rows.Count != 0)
{
for(int i=0;i <mytab.Rows.Count;i++)
{
mystr += "," + mytab.Rows[i]["typeid"].ToString() + "|" + mytab.Rows[i]["typename"].ToString();
}
mystr = mystr.Substring(1);
}

//输出页面
this.Response.Write(mystr);
this.Response.End();
}

/// <summary>
/// 绑定第一个下拉框
/// </summary>
private void DownBind1()
{
//显示所有的主分类
string sql = "select sortid,sort from class_1 order by sortid asc ";
DataTable mytab = this.Get_Dt(sql);

//绑定第一个下拉框
this.mydown1.DataSource = mytab;
this.mydown1.DataValueField = "sortid";
this.mydown1.DataTextField = "sort";
this.mydown1.DataBind();

//添加一个"请选择"行
this.mydown1.Items.Insert(0,new ListItem("请选择分类",""));

//为此下拉框添加一个默认选择项(此处默认为sortid = 1
//做选项时,如果你添加的选定项而此控件中却没有此项,即会出错


//如:this.mydown1.SelectedValue = "1";
//所以此处以如下方式进行选定
ListItem myItem = this.mydown1.Items.FindByValue("1");
if(myItem != null)
{
myItem.Selected = true;
}

//为此下拉框添加选择事件,第一个参数是自己,第二个参数为要填充的下拉框的名称
this.mydown1.Attributes.Add("onchange","XmlPost(this,'" + this.mydown2.ClientID + "');");
}

/// <summary>
/// 绑定第二个下拉框
/// </summary>
private void DownBind2()
{
//默认显示分类号为1的所有子类
  string sql = "select sortid,typename,typeid from class_2 where sortid =1" ;
  DataTable mytab = this.Get_Dt(sql);

//绑牢控件
  this.mydown2.DataSource = mytab;
  this.mydown2.DataValueField = "typeid";
  this.mydown2.DataTextField = "typename";
  this.mydown2.DataBind();

//添加一个空的首行
this.mydown2.Items.Insert(0,new ListItem("请选择名称",""));
}

读书人网 >asp.net

热点推荐