|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)疾速进门 跟着ajax手艺的呈现,web2.0时期已光降,今朝已出现了大批的web2.0的网站,好比live.com,fclickr相册网站,googleMap等等。那甚么是ajax呢?AJAX手艺实际上是旧瓶装新酒了,它利用了异步JavaScript+XML。这类手艺起首由微软在1999年引进,并以"利用远程挪用的DHTML/JavaScriptweb使用程序"著称。这一手艺的基础头脑是,同意一个互联网扫瞄器向一个远程页面/服务作异步的HTTP挪用,而且用收到的了局更新一个以后web页面而不用革新全部页面。依据这类手艺创立者的定见,这类手艺应可以改善客户真个体验,使得HTTP页面表面与利用感到很相似于Windows桌面使用程序。
今朝,已出现出了很多关于ajax的手艺框架。而在.net方面,也有很多开源的框架,如ajax.net,magicajax等。而微软也推出了本人的ajax框架----Atlas,今朝的版本是6月份的CTP版本。在Atlas中,已封装好了大批的ajax控件和功效,非常便利。本文中将以两个实例来讲明怎样利用Atlas来完成两个复杂的ajax使用。
起首,我们要下载atlas,能够到http://atlas.asp.net上往下载atlas的相干安装文件。我们先来看一个复杂的例子,在这个例子中,
我们经由过程asp.net2.0中的日历控件来讲明怎样利用atlas.先翻开vs.net2005,选择"新建web站点",以下图,这时候会发明有"Atlaswebsite"的模版,这时候我们能够输出要创立使用的称号,这里我们就用默许的称号AtlasWebSite1。
在计划办理器中,你会发明vs.net2005已事后安排了一些文件,个中,在bin文件夹下包括了Microsoft.Web.Atlas.dll文件,这是撑持ajax功效的文件。为了能在计划中利用到ajax控件,必需在TOOLS工具箱中增加一个新的选项卡,定名为Atals,然后右键点击该选项卡,在弹出的菜单当选择"chooseitem",然后用扫瞄的功效,选择atals.dll文件,如许,就增加了一系列的Atals控件,以下图:
我们将个中的ScriptManager控件拖沓到页面中往。ScriptManager控件能够看做是办理Atlas控件的汇合,它用来处置页面上的一切Atlas组件和部分页面的更新,天生相干的客户端剧本,一切必要撑持Atlas的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们能够指定必要的剧本库,大概指定经由过程JS来挪用的WebService,还能够指定页面毛病处置等。
接着,我们拖沓一个日历控件到页面中往,放在方才scriptmanager控件的上面,而且选择一个喜好的款式,以下图所示:
<P> 接上去,我们看下怎样在这个日历控件中利用ajax手艺。在.net的日历控件中,人们常常埋怨的是,每次选定日历上的一个日期,城市激发一次postback页面回传,必要用户守候,非常不便利。上面,我们经由过程Atals控件,来对日历控件举行改革。
在default.aspx页中,切换到代码视图,在之前的<atlas:ScriptManager>控件中,到场EnablePartialRendering属性,以使得atlas能够对页面举行部分更新,以下所示
<atlas:ScriptManagerID="ScriptManager1"runat="server"
EnablePartialRendering="true"/>
再增添一个<UpdatePanel>控件,UpdatePanel是Atlas中一个很主要的控件,功效壮大简单利用,能够只做很小的修改就能够向已有的ASP.NET站点增加Ajax功效,我们再将日历控件拖沓放到updatepanel控件中往,个中要注重到,日历控件是放到<ContentTemplate>的标签内的,该标签内放的就是受UpdatePanel把持的控件,以下代码所示:
<atlas:UpdatePanelID="id1"runat="server">
<ContentTemplate>
<asp:CalendarID="Calendar1"runat="server"
BackColor="#FFFFCC".../>
</asp:Calendar>
</ContentTemplate>
</atlas:UpdatePanel>
为了更好地看到效果,我们增添两个下拉选择框,可让用户选择年份和月份,代码以下所示
<formid="form1"runat="server">
<atlas:ScriptManagerID="ScriptManager1"runat="server"
EnablePartialRendering="true"/>
<asp:DropDownListID="DropDownList1"runat="server"
AutoPostBack="True">
<asp:ListItemValue="1">Jan</asp:ListItem>
<asp:ListItemValue="2">Feb</asp:ListItem>
<asp:ListItemValue="3">Mar</asp:ListItem>
<asp:ListItemValue="4">Apr</asp:ListItem>
<asp:ListItemValue="5">May</asp:ListItem>
<asp:ListItemValue="6">Jun</asp:ListItem>
<asp:ListItemValue="7">Jul</asp:ListItem>
<asp:ListItemValue="8">Aug</asp:ListItem>
<asp:ListItemValue="9">Sep</asp:ListItem>
<asp:ListItemValue="10">Oct</asp:ListItem>
<asp:ListItemValue="11">Nov</asp:ListItem>
<asp:ListItemValue="12">Dec</asp:ListItem>
</asp:DropDownList>
Year
<asp:DropDownListID="DropDownList2"runat="server"
AutoPostBack="True">
<asp:ListItem>2005</asp:ListItem>
<asp:ListItem>2006</asp:ListItem>
<asp:ListItem>2007</asp:ListItem>
</asp:DropDownList><br/>
然后在code-behind的代码中,写进以下代码:
ProtectedSubDropDownList1_SelectedIndexChanged(_
ByValsenderAsObject,_
ByValeAsSystem.EventArgs)_
HandlesDropDownList1.SelectedIndexChanged
WithCalendar1
.VisibleDate=NewDate(_
DropDownList2.SelectedValue,_
DropDownList1.SelectedValue,1)
EndWith
EndSub
ProtectedSubDropDownList2_SelectedIndexChanged(_
ByValsenderAsObject,_
ByValeAsSystem.EventArgs)_
HandlesDropDownList2.SelectedIndexChanged
WithCalendar1
.VisibleDate=NewDate(_
DropDownList2.SelectedValue,_
DropDownList1.SelectedValue,1)
EndWith
EndSub
在下面的代码中,分离为月份和年份的下拉选择框的selectedindexchanged事务写进了代码,次要是把持当用户选择了月份和年份时,日历控件中显现响应的日期。但当我们F5运转时,会觉察页面仍然会引发postback革新的。因而,我们要界说触发器triggers。
所谓的触发器,指定了产生举措的事务源,UpdatePanel供应两种激发异步PostBack的Trigger,分离是ControlEventTrigger和ControlEventTrigger。个中ControlEventTrigge是指当某个控件的某个指定的属性变更时更新,而ControlEventTrigger是指当指定的事务产生时举行更新。则我们修正代码以下:
<atlas:UpdatePanelID="id1"runat="server">
<ContentTemplate>
<asp:CalendarID="Calendar1"runat="server"
BackColor="#FFFFCC".../>
</asp:Calendar>
</ContentTemplate>
<Triggers>
<atlas:ControlValueTriggerControlID="DropDownList1"
PropertyName="SelectedValue"/>
<atlas:ControlEventTriggerControlID="DropDownList2"
EventName="SelectedIndexChanged"/>
</Triggers>
</atlas:UpdatePanel>
这里,分离指定了月份下拉框的属性触发器和年份下拉框的事务触发器,使得不管当用户选择哪个下拉框时,城市激发部分的革新,而这些革新全体都经由过程updatepanel控件来封装举行处置了。以是当运转程序时,页面不会象之前那样要举行一次postback和全体页面的革新。
最初,我们再在日历控件上面,增添一个进度形态条控件UpdateProgress,用来向用户反应以后的进度,代码以下所示
<atlas:UpdateProgressID="pro"runat="server">
<ProgressTemplate>
<asp:LabelID="Label1"runat="server"Text="Label">
UpdatingCalendar...
</asp:Label>
</ProgressTemplate>
</atlas:UpdateProgress>
要注重的是,下面我们在进度形态控件的<ProgressTemplate>中,我们只是复杂到场了一个标签控件,假如有实践必要的话,我们是能够到场图片的。
到此,我们的程序半途而废了,运转这个日过程序,选择月份和年份下拉框,会看到日历控件没有象之前那样引发全部页面的革新,而是很快在日历控件中显现出响应的日期。
<P> 为了加深对Atlas的熟悉,我们再举一个例子来讲明成绩。我们的这个使用,将是在一个页面中,供应给用户能经由过程点选分类主题按钮的体例,取得站点上最新的旧事,这是经由过程读取站点上的RSS的情势来举行的。
我们起首新建别的的一个页面,个中也放进scriptmanager控件,接着我们要计划一个复杂的页面了。好比增加一个悦目的BANNER在页面头部,而且为了显现加载的进度,此次我们增加一个有Loading…动画的GIF,再创建一个一行两列的年夜表格,在表格的右边,放进多少个按钮。好比这里我们依据每一个手艺专题,放进了十个按钮。
然后再拖放一个xmldatasource控件到窗体中,由于我们要读取网站上的RSSXML文件举行剖析。在表格的右侧,放进一个DataList控件,而且将这个DataList控件绑定到xmldatasource控件中往。最初,大抵的界面图以下所示:
接上去对XMLDATASOURCE控件举行设置。我们点选控件右上方的智能感知功效,在弹出的窗口中的XPATH里,选择XpathExpression,在这里,我们填进"rss/channel/item"。要注重的是,因为我们想扫瞄的网站供应的RSS的XML文件里,我们只对每一个频道的最新信息感乐趣,因而我磨恩如许填写,而完全的该网站的RSS信息在http://services.devx.com/outgoing/devxfeed.xml能够看到。最初,我们的页眼前端代码以下所示:
<atlas:UpdatePanelID="id1"runat="server">
<ContentTemplate>
<asp:LabelID="Label1"runat="server"Text="Label"
Font-Bold="True"></asp:Label>
<atlas:UpdateProgressID="pro"runat="server">
<ProgressTemplate>
<asp:ImageID="Image1"runat="server"
ImageUrl="~/loading.gif"/>
</ProgressTemplate>
</atlas:UpdateProgress>
<asp:DataListID="DataList1"runat="server"
BackColor="LightGoldenrodYellow"BorderColor="Tan"
BorderWidth="1px"CellPadding="2"ForeColor="Black"
Width="755px">
<FooterStyleBackColor="Tan"/>
<SelectedItemStyleBackColor="DarkSlateBlue"
ForeColor="GhostWhite"/>
<AlternatingItemStyleBackColor="PaleGoldenrod"/>
<HeaderStyleBackColor="Tan"Font-Bold="True"/>
<ItemTemplate>
<b>
<%#XPath("title")%>
</b>
<br/>
<i>
<%#XPath("description")%>
</i><%#XPath("pubDate")%>
<br/>
<ahref=<%#XPath("link")%>>Link</a>
<br/>
<br/>
</ItemTemplate>
</asp:DataList>
<asp:XmlDataSourceID="XmlDataSource1"runat="server"
XPath="rss/channel/item"></asp:XmlDataSource>
</ContentTemplate>
<Triggers>
<atlas:ControlEventTriggerControlID="Button1"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button2"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button3"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button4"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button5"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button6"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button7"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button8"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button9"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button10"
EventName="Click"/>
<atlas:ControlEventTriggerControlID="Button11"
EventName="Click"/>
</Triggers>
</atlas:UpdatePanel>
...
在下面的代码中,我们除为每个button按钮都设置了事务触发器外,还在DataList控件中,经由过程<%#XPath("description")%>的体例,将读取并剖析好的XML文件绑定显现出来。上面,我们就入手下手撰写后真个处置读取到的RSSXML文件的代码。
<P> 起首,因为要处置XML,读取网站上的资本,以是要引进以下几个定名空间
ImportsSystem.Net
ImportsSystem.IO
ImportsSystem.Xml
当用户点选某个分类主题的按钮时,将会主动下载该网站中切合主题的RSSXML文件,下载完后再举行剖析,再显现到页面中往。代码以下:
PublicFunctionSendRequest(_
ByValURIAsString,_
ByValrequestTypeAsString)AsHttpWebRequest
DimreqAsHttpWebRequest=Nothing
Try
//倡议HTTP哀求
req=HttpWebRequest.Create(URI)
req.Method=requestType
CatchexAsException
ThrowNewException("Error")
EndTry
Returnreq
EndFunction
PublicFunctionGetResponse(_
ByValreqAsHttpWebRequest)AsString
DimbodyAsString=String.Empty
Try
//从服务器中取得呼应输入流
DimrespAsHttpWebResponse=req.GetResponse()
DimstreamAsStream=resp.GetResponseStream()
//利用streamreader去向理失掉的服务器呼应
DimreaderAsStreamReader=_
NewStreamReader(stream,Encoding.UTF8)
body=reader.ReadToEnd()
stream.Close()
CatchexAsException
ThrowNewException("Error")
EndTry
Returnbody
EndFunction
下面的两个办法,分离向网站服务器收回猎取指定URL的信息的哀求,并用IO流中的streamreader的体例取得服务器前往的输入信息。而上面的LoadRSS()办法,传进的参数是指定的URL地点,然后分离挪用下面的两个办法,在最初取得服务器前往的输入流后,再经由过程剖析XML的体例,选择符合的结点内容举行前往。代码以下:
PublicFunctionLoadRSS(_
ByValURIAsString)AsString
DimreqAsHttpWebRequest
DimxmlDocAsXmlDocument=Nothing
Try
XmlDataSource1.DataFile=URI
//下载RSSXML文件
req=SendRequest(URI,"GET")
DimxmlDataAsString=GetResponse(req)
xmlDoc=NewXmlDocument()
xmlDoc.LoadXml(xmlData)
//选择符合的结点
DimtitleNodeAsXmlNode=_
xmlDoc.DocumentElement.SelectSingleNode("channel/title")
ReturntitleNode.InnerText
CatchexAsException
ReturnString.Empty
EndTry
EndFunction
接着,我们另有为10多个按钮编写呼应的事务,当点选了某个分类主题的按钮后,则向服务器哀求指定的分类主题的RSSXML,代码以下:
PublicSubButton_Click(_
ByValsenderAsObject,ByValeAsSystem.EventArgs)_
HandlesButton1.Click,Button2.Click,Button3.Click,_
Button4.Click,Button5.Click,Button6.Click,_
Button7.Click,Button8.Click,Button9.Click,_
Button10.Click,Button11.Click
DimURLAsString=String.Empty
SelectCaseCType(sender,Button).Text
Case"Database":URL=_
"http://services.devx.com/outgoing/databasefeed.xml"
Case".NET":URL=_
"http://services.devx.com/outgoing/dotnet.xml"
Case"C++":URL=_
"http://services.devx.com/outgoing/cplusfeed.xml"
Case"RecentTips":URL=_
"http://services.devx.com/outgoing/recentTipsFeed.xml"
Case"WebDev":URL=_
"http://services.devx.com/outgoing/webdevfeed.xml"
Case"Latest":URL=_
"http://services.devx.com/outgoing/devxfeed.xml"
Case"Enterprise":URL=_
"http://services.devx.com/outgoing/enterprisefeed.xml"
Case"Wireless/Mobile":URL=_
"http://services.devx.com/outgoing/wirelessfeed.xml"
Case"XML":URL=_
"http://services.devx.com/outgoing/xmlfeed.xml"
Case"Java":URL=_
"http://services.devx.com/outgoing/javafeed.xml"
Case"OpenSource":URL=_
"http://services.devx.com/outgoing/openSourceFeed.xml"
EndSelect
Label1.Text=LoadRSS(URL)
EndSub
最初,在LOAD事务中,默许读取最新信息的RSSXML
ProtectedSubPage_Load(_
ByValsenderAsObject,_
ByValeAsSystem.EventArgs)HandlesMe.Load
Label1.Text=_
LoadRSS("http://services.devx.com/outgoing/devxfeed.xml")
EndSub
运转后效果以下图所示,点选右边每一个分类主题的按钮,城市主动往该网站下载最新的RSSXML而且举行剖析,最初展现到页面中往,而这统统都因为用了Atlas而是无革新的。
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的) |
|