选择显示字体大小

如何实现无刷新的dropdownlist联动效果

    asp.net给我们带了了事件模型的编程机制,这使得我们将所有的任务都放在服务器上执行哪怕是一个小小变动,其实这到不是什么问题,可是有一点我们无法忍受,如果我们改变某一个输入框中的内容页面要刷新, 改变dropdownlist的选择项需要更新另一个dropdownlist需要刷新,真是郁闷。
       下面我将描述一种原始的方法,之所以说它原是是因为这种方法在asp.net之前就已经有了,我想这两者之间的关系我不必详细描述,我们今天要说的是如何不刷新页面更新dropdownlist,该方法旨在抛砖引玉,其实使用该方法可以实现许多不刷新网页就和后台交互的应用,好了废话就不说了,看看我们的例子吧,首先我们需要一个放置两个dropdownlist的页面,假如它叫webform2.aspx,页面的代码如下:
<&#37;@ page language="c#" codebehind="webform2.aspx.cs" autoeventwireup="false" inherits="webapptest1.webform2" &#37;>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
 <head>
  <title>webform2</title>
  <meta content="microsoft visual studio .net 7.1" name="generator">
  <meta content="c#" name="code_language">
  <meta content="javascript" name="vs_defaultclientscript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetschema">
  <script>
      function load(state){
       var drp2 = document.getelementbyid("dropdownlist2");
       for(var i = 0;i<=drp2.options.length -1;i++){
    drp2.remove(i);
       }
                            var ohttpreq = new activexobject("msxml2.xmlhttp");
       var odoc = new activexobject("msxml2.domdocument");
       ohttpreq.open("post", "webform6.aspx?state="+state, false);
       ohttpreq.send("");
       result = ohttpreq.responsetext;
       odoc.loadxml(result);
       items = odoc.selectnodes("//city/table");
       for (var item = items.nextnode(); item; item = items.nextnode()){
    var city = item.selectsinglenode("//city").nodetypedvalue;
    var newoption = document.createelement("option");
    newoption.text = city;
    newoption.value = city;
    drp2.options.add(newoption);
       }
      }
  </script>
 </head>
 <body ms_positioning="flowlayout">
  <form id="form1" method="post" runat="server">
   <asp:dropdownlist id="dropdownlist1" runat="server"></asp:dropdownlist>
   <asp:dropdownlist id="dropdownlist2" runat="server"></asp:dropdownlist>
  </form>
 </body>
</html>
        上面的页面中有两个dropdownlist和一段js脚本,该脚本可以直接写在页面也可以写在后台在regeist到页面上(后者更灵活一些)该页的后台代码如下所示,在page_load里面写如下的代码:
 if(!this.ispostback){
  sqlconnection con = new sqlconnection("server=localhost;database=pubs;uid=sa;pwd=sa;");
  sqldataadapter da = new sqldataadapter("select state from authors group by state",con);
  dataset ds = new dataset();
  this.dropdownlist1.datatextfield = "state";
  this.dropdownlist1.datavaluefield = "state";
  this.dropdownlist1.databind();
  this.dropdownlist1.attributes.add("onchange","load(this.options[this.selectedindex].innertext)");
 }
       在上面的代码中我们做了两件事情:1、帮定其中一个dropdownlist(你也可以同时绑定两个)。2、指定该控件的客户端脚本。下面我们详细介绍一下上面的js代码,首先得到页面上要联动的dorpdownlist对象,将他的options清空,再创建两个客户端对象ohttpreq和odoc对象,其中一个负责发送请求另一个负责得到响应结果,我们将用户选择的state发送到名为webform6.aspx的页面,该页面将处理这个请求并返回一个响应,该响应的结果是一个xml文件,稍候介绍webform6.aspx里面的代码。我们将返回的结果使用loadxml方法load到odoc对象里面,然后就可以使用selectnodes方法得到所有的city节点,接着循环这些节点在客户端创建option对象,最后将这些option对象add到dropdwonlist2里面去。
        下面我们看看webfowm6.aspx都做了些什么事情,该页面的html页面是一个除了包括<@page>指令意外什么都没有的页面,后台的page_load代码如下:
 private void page_load(object sender, system.eventargs e){
  // put user code to initialize the page here
  if(this.request["state"]!=null){
  string state = this.request["state"].tostring();
  sqlconnection con = new sqlconnection("server=localhost;database=pubs;uid=sa;pwd=sa;");
  sqldataadapter da = new sqldataadapter("select city from authors where state = '"+state+"'",con);
  dataset ds = new dataset("city");
  da.fill(ds);
  xmltextwriter writer = new xmltextwriter(response.outputstream, response.contentencoding);
  writer.formatting = formatting.indented;
  writer.indentation = 4;
  writer.indentchar = ' ';
  ds.writexml(writer);
  writer.flush();
  response.end();
  writer.close();
 }
         该方法得到用户选择的state通过查询以后得到一个dataset对象,使用该对象的writexml方法直接将内容写到response.outputstream里面然后传递到客户端,客户端的load方法通过result =ohttpreq.responsetext;句话得到一个xml字符串,最后解析此串。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons