|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了!革新|无革新ASP.NET给我们带了了事务模子的编程机制,这使得我们将一切的义务都放在服务器上实行哪怕是一个小小变化,实在这到不是甚么成绩,但是有一点我们没法忍耐,假如我们改动某一个输出框中的内容页面要革新,改动DropDownlist的选择项必要更新另外一个Dropdownlist必要革新,真是忧郁。
上面我将形貌一种原始的办法,之以是说它原是是由于这类办法在ASP.NET之前就已有了,我想这二者之间的干系我不用具体形貌,我们明天要说的是怎样不革新页面更新DropDownList,该办法旨在举一反三,实在利用该办法能够完成很多不革新网页就和背景交互的使用,好了空话就不说了,看看我们的例子吧,起首我们必要一个安排两个DropDownList的页面,假设它叫WebForm2.aspx,页面的代码以下:
<%@Pagelanguage="c#"Codebehind="WebForm2.aspx.cs"AutoEventWireup="false"Inherits="WebApptest1.WebForm2"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>WebForm2</title>
<metacontent="MicrosoftVisualStudio.NET7.1"name="GENERATOR">
<metacontent="C#"name="CODE_LANGUAGE">
<metacontent="JavaScript"name="vs_defaultClientScript">
<metacontent="http://schemas.microsoft.com/intellisense/ie5"name="vs_targetSchema">
<script>
functionload(state){
vardrp2=document.getElementById("DropDownList2");
for(vari=0;i<=drp2.options.length-1;i++){
drp2.remove(i);
}
varoHttpReq=newActiveXObject("MSXML2.XMLHTTP");
varoDoc=newActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST","webform6.aspx?state="+state,false);
oHttpReq.send("");
result=oHttpReq.responseText;
oDoc.loadXML(result);
items=oDoc.selectNodes("//CITY/Table");
for(varitem=items.nextNode();item;item=items.nextNode()){
varcity=item.selectSingleNode("//city").nodeTypedValue;
varnewOption=document.createElement("OPTION");
newOption.text=city;
newOption.value=city;
drp2.options.add(newOption);
}
}
</script>
</HEAD>
<bodyMS_POSITIONING="flowLayout">
<formid="Form1"method="post"runat="server">
<asp:DropDownListid="DropDownList1"runat="server"></asp:DropDownList>
<asp:DropDownListid="DropDownList2"runat="server"></asp:DropDownList>
</form>
</body>
</HTML>
下面的页面中有两个DropDownList和一段js剧本,该剧本能够间接写在页面也能够写在背景在Regeist到页面上(后者更天真一些)该页的背景代码以下所示,在Page_Load内里写以下的代码:
if(!this.IsPostBack){
SqlConnectioncon=newSqlConnection("server=localhost;database=pubs;uid=sa;pwd=sa;");
SqlDataAdapterda=newSqlDataAdapter("selectstatefromauthorsgroupbystate",con);
DataSetds=newDataSet();
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代码以下:
privatevoidPage_Load(objectsender,System.EventArgse){
//Putusercodetoinitializethepagehere
if(this.Request["state"]!=null){
stringstate=this.Request["state"].ToString();
SqlConnectioncon=newSqlConnection("server=localhost;database=pubs;uid=sa;pwd=sa;");
SqlDataAdapterda=newSqlDataAdapter("selectcityfromauthorswherestate="+state+"",con);
DataSetds=newDataSet("CITY");
da.Fill(ds);
XmlTextWriterwriter=newXmlTextWriter(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字符串,最初剖析此串。
该办法能够完成无革新的联动DropDownList,数据是从背景的数据库中失掉的,但愿能够起到</p>缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。 |
|