﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-KiMoGiGi 技术文集-随笔分类-AJAX.NET</title><link>http://www.cnitblog.com/seeyeah/category/3174.html</link><description>不在乎选择什么，而在乎坚持多久……</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 21:32:09 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 21:32:09 GMT</pubDate><ttl>60</ttl><item><title>ASP.NET AJAX Controls and Extenders Tutorial</title><link>http://www.cnitblog.com/seeyeah/archive/2008/02/25/40141.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 25 Feb 2008 15:19:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/02/25/40141.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/40141.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/02/25/40141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/40141.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/40141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Refrence From ..ASP.NET AJAX Controls and Extenders TutorialBy James AshleyIntroductionWhen you open up Visual Studio 2008 to create a project, you will notice that it has two new web temp...&nbsp;&nbsp;<a href='http://www.cnitblog.com/seeyeah/archive/2008/02/25/40141.html'>阅读全文</a><img src ="http://www.cnitblog.com/seeyeah/aggbug/40141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-02-25 23:19 <a href="http://www.cnitblog.com/seeyeah/archive/2008/02/25/40141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Implementing Model-View-Presenter in ASP.NET  By Alex Mueller. </title><link>http://www.cnitblog.com/seeyeah/archive/2007/11/10/36127.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 10 Nov 2007 13:47:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/11/10/36127.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/36127.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/11/10/36127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/36127.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/36127.html</trackback:ping><description><![CDATA[引用<a href="http://www.codeproject.com/useritems/MVP_in_ASPNET.asp">http://www.codeproject.com/useritems/MVP_in_ASPNET.asp</a><br>
<hr>
&nbsp;
<ul class=download>
    <li><a href="http://www.codeproject.com/useritems/MVP_in_ASPNET/MVPSampleApp.zip"><u><font color=#0000ff>Download MVPSampleApp.zip - 673.2 KB</font></u></a>
    <li><a href="http://www.codeproject.com/useritems/MVP_in_ASPNET/SQL2000SampleDb.zip"><u><font color=#0000ff>Download SQL2000SampleDb.zip - 1,177.7 KB</font></u></a> </li>
</ul>
<h2>Introduction</h2>
<p>I have been using the model-view-presenter pattern in my ASP.NET web applications for a little over a year now. I was first introduced to MVP in a smart-client application using an event-driven implementation well before applying it in ASP.NET. After spending some time in a thick client environment, I found that applying MVP to the web reveals a new set of problems that need to be addressed. This article will describe these issues and provide an implementation for ASP.NET that I feel maximizes usability and testability. </p>
<p>What this article will do is briefly explain the basics of the pattern and provide three implementations of MVP for ASP.NET. I provide three implementations to allow the reader to see how the pattern can vary, and how the roles for the ASPX page, ASCX user control, and Presenter are defined in each. There is no one correct implementation of MVP in ASP.NET. Whichever implementation is used is really just a matter of personal preference and theoretical debate. </p>
<h2>Model-View-Presenter in ASP.NET: Setting the Stage</h2>
<p>By default, ASP.NET implements a <a href="http://msdn2.microsoft.com/en-us/library/ms998548.aspx." target=_blank><u><font color=#0000ff>Page Controller</font></u></a> pattern that does not promote good separation of concerns nor testability. The dependency on the ASP.NET runtime makes testing of the implementation difficult without generating testing scenarios that are impractical. Since unit testing of view specific pages is difficult, we look for patterns that promote testability. MVP is such a pattern. </p>
<p>Model-view-presenter is a design pattern that aims to increase separation of concerns and testability. Its primary goal is to separate view specific logic from domain/business logic. As we design object-oriented applications, we desire objects that are loosely coupled and can be easily reused. In order to do so, we need to build classes and layers that are specific to certain tasks, such as view, presentation, service, and data access to name a few. In ASP.NET, it is too easy to add domain or business logic to our ASPX page or ASCX user control classes, creating tightly coupled classes that become difficult to reuse and test. MVP seeks to separate view-specific logic from domain/business logic by using a presentation layer. </p>
<p>The secondary goal of MVP is to improve testability of the view. It is difficult to write a unit test for a class that is dependent upon Session or ViewState, Ajax, Html or web controls, and domain/business objects. Instead, we leave that view-specific logic in the ASPX/ASCX classes and pull presentation and domain/business logic out of the view and put them in their appropriate classes. In MVP, the presenter acts as a mediator between the view and our domain/business logic. </p>
<p>Martin Fowler has split the MVP pattern into two new patterns, Supervising Controller and Passive View. Unlike a true MVC (model-view-controller) framework that enforces a strict separation of the view layer from the presentation (controller), in ASP.NET, this separation is not enforced by default. Because of this, it is difficult to enforce any one implementation of MVP without conscientious effort on the part of the developer, and the grey area between implementing a Supervising Controller and a Passive View widens. As a rule of thumb when creating my presenters, I try and pull as much logic as possible out of the view that I want under test, and put that into the presenter. I let the view handle view-specific logic such as JavaScript, HTML and WebControls, and Ajax frameworks. Since there is still some logic in my view, I tend to classify this as Supervising Controller versus Passive View, and after several sleepless nights debating this in my head, I am happy with Supervising Controller in ASP.NET. </p>
<p>If you need a more detailed introduction beyond what is mentioned above, you may find these links helpful. <br><a href="http://martinfowler.com/eaaDev/uiArchs.html" target=_blank><u><font color=#0000ff>GUI Architectures</font></u></a> <br><a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html" target=_blank><u><font color=#0000ff>Supervising Controller</font></u></a> <br><a href="http://martinfowler.com/eaaDev/PassiveScreen.html" target=_blank><u><font color=#0000ff>Passive View</font></u></a> <br><a href="http://en.wikipedia.org/wiki/Presenter_First" target=_blank><u><font color=#0000ff>Presenter First</font></u></a> <br><a href="http://www.codeproject.com/aspnet/ModelViewPresenter.asp" target=_blank><u><font color=#800080>Model View Presenter with ASP.NET</font></u></a> <br><a href="http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx" target=_blank><u><font color=#0000ff>ASP.NET Supervising Controller (Model View Presenter) From Schematic To Unit Tests to Code</font></u></a> </p>
<h2>Different Implementations of MVP in ASP.NET</h2>
<p>While implementing MVP in ASP.NET, my designs have followed a few different schools of thought. One such approach was detailed by <a href="http://www.codeproject.com/aspnet/ModelViewPresenter.asp" target=_blank><u><font color=#800080>Billy McCafferty</font></u></a> and another by <a href="http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx" target=_blank><u><font color=#0000ff>Phil Haack</font></u></a>. Since my introduction to MVP was event-driven in a windows application, I applied the event-driven approach that was most familiar to me. The stateless nature of the web was the first obstacle I found I needed to overcome. In ASP.NET, we recreate our MVP relationship with each trip to the server. Persisting state and referencing "Page.IsPostBack" becomes necessary. The sample application and the code snippets below illustrate how we recreate our presenter and pass the IsPostBack value to manage this difficulty. What I have discovered with the MVP pattern is that it can have many variations in ASP.NET, and choosing which one to implement is really a matter of preference. My preferred implementation contains characteristics of some of the authors mentioned above as well as what I have discovered for myself over the past year. </p>
<p>The next section will be divided up into three parts, one for each implementation. I will start with my original introduction to MVP in ASP.NET, then move on to my more familiar event-driven approach. Finally, I will provide a third implementation that I feel provides greater reusability. The sample application I am including with this article has basic examples of each implementation. Each section will describe which modules in the sample app correspond. The code snippets I am providing below are extremely simplistic and are not complete. They are thorough enough to illustrate their points. </p>
<h2>The First Implementation</h2>
<p>The first implementation is <a href="http://www.codeproject.com/aspnet/ModelViewPresenter.asp" target=_blank><u><font color=#800080>Billy McCafferty's</font></u></a>. It introduces the role of the "view initializer and page redirector" to the ASPX page. The view is the ASCX user control, and the presenter only knows about the interface describing the view. The ASPX page is responsible for instantiating the presenter and passing it the view and any model objects the presenter requires. It then attaches the presenter to the view, so the view may reference the presenter when necessary. Lastly, it calls "InitView" on the presenter to simulate the Page.IsPostBack event in ASP.NET. </p>
<p>This example is implemented as the "Product" module in the sample application. </p>
<div class=precollapse id=premain0 style="WIDTH: 100%"><img id=preimg0 style="CURSOR: pointer" height=9 src="http://www.codeproject.com/images/minus.gif" width=9 preid="0"><span id=precollapse0 style="MARGIN-BOTTOM: 0px; CURSOR: pointer" preid="0"> Collapse</span></div>
<pre id=pre0 style="MARGIN-TOP: 0px"><strong>Note: The code below is used to highlight the main points of this design. Please see the sample application for a working model.</strong>
<strong>The Presenter</strong>
public class Presenter
{
public Presenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
public void InitView(bool isPostBack)
{
if(!isPostBack)
{
view.SetProducts(model.GetProducts());
}
}
public void SaveProducts(IList&lt;IProduct&gt; products)
{
model.SaveProducts(products);
}
}
<strong>The ASPX Page: The Starting Point</strong>
The ASPX HTML references the ASCX user control, and in code behind we have this.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
presenter = new Presenter(view,model;
view.AttachPresenter(presenter);
presenter.InitView(Page.IsPostBack);
}
<strong>The ASCX User Control</strong>
public void AttachPresenter(Presenter presenter)
{
this.presenter = presenter;
}
public void SetProducts(IList&lt;IProduct&gt; products)
{
<span class=cpp-comment>// bind products to view</span>
}
<strong>The View Interface</strong>
public interface IView
{
void AttachPresenter(Presenter presenter);
void SetProducts(IList&lt;IProduct&gt; products);
}
</pre>
<h2>The Second Implementation</h2>
<p>The second implementation is an event-driven approach. It uses the "view initializer and page redirector" role for the ASPX page just as the first. The ASCX user control implements a view interface that declares events that will be raised to a presenter. The view knows nothing about the presenter; it only knows how to raise events. The ASPX page initializes the presenter, passing to it the view and any model objects. The ASPX page is not responsible for attaching the presenter to a view, nor calling "InitView" on the presenter. Its only job is to wire up the presenter with the view instance and model objects, and to respond to events that the presenter might raise, such as a page redirect or some type of status event. </p>
<p>This example is implemented as the "Customer" module in the sample application. </p>
<div class=precollapse id=premain1 style="WIDTH: 100%"><img id=preimg1 style="CURSOR: pointer" height=9 src="http://www.codeproject.com/images/minus.gif" width=9 preid="1"><span id=precollapse1 style="MARGIN-BOTTOM: 0px; CURSOR: pointer" preid="1"> Collapse</span></div>
<pre id=pre1 style="MARGIN-TOP: 0px"><strong>Note: The code below is used to highlight the main points of this design. Please see the sample application for a working model.</strong>
<strong>The Presenter</strong>
public class Presenter
{
public Presenter(IView view, IModel model)
{
this.view = view;
this.model = model;
this.view.OnViewLoad += new EventHandler&lt;SingleValueEventArgs&lt;bool&gt;&gt;(OnViewLoadListener);
this.view.SaveProducts += new EventHandler&lt;SingleValueEventArgs&lt;IList&lt;IProduct&gt;&gt;&gt;(SaveProductListener);
}
private void OnViewLoadListener(object sender, SingleValueEventArgs&lt;bool&gt; isPostBack)
{
if (!isPostBack.Value)
{
<span class=cpp-comment>// Set the view for the first time</span>
view.SetProducts(model.GetProducts());
}
}
private void SaveProductListener(object sender, SingleValueEventArgs&lt;IList&lt;IProduct&gt;&gt; products)
{
model.SaveProducts(products.Value);
}
}
<strong>The ASPX Page: The Starting Point</strong>
The ASPX HTML references the ASCX user control, and in code behind we have this.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
presenter = new Presenter(this,model);
}
<strong>The ASCX User Control</strong>
protected override void OnLoad(EventArgs e)
{
EventHandler eventHandler = OnViewLoad;
if (eventHandler != null)
{
<span class=cpp-comment>// Invoke our delegate</span>
eventHandler(this, new SingleValueEventArgs&lt;bool&gt;(Page.IsPostBack));
}
base.OnLoad(e);
}
public void SetProducts(IList&lt;IProduct&gt; products)
{
<span class=cpp-comment>// bind products to view</span>
}
protected void btnSave_Click(object sender, EventArgs e)
{
<span class=cpp-comment>// Raise our event</span>
OnSaveProducts(GetProducts());
}
public event EventHandler&lt;SingleValueEventArgs&lt;string&gt;&gt; SaveProducts;
public virtual void OnSaveProducts(IList&lt;IProduct&gt;&gt; products)
{
EventHandler&lt;SingleValueEventArgs&lt;IList&lt;IProduct&gt;&gt;&gt; eventHandler = SaveProducts;
if (eventHandler != null)
{
eventHandler(this, new SingleValueEventArgs&lt;IList&lt;IProduct&gt;&gt;(products));
}
}
<strong>The View Interface</strong>
public interface IView
{
event EventHandler OnViewLoad;
event EventHandler&lt;SingleValueEventArgs&lt;IList&lt;IProduct&gt;&gt;&gt;SaveProducts;
void SetProducts(IList&lt;IProduct&gt; products);
}
</pre>
<h2>The Third Implemenation</h2>
<p>The third implementation delegates the responsibility of creating the presenter, passing in the view and model, and calling "InitView" on the presenter to the ASCX user control (view). The view has a reference to its presenter. The presenter only knows about an interface to the view. The ASPX page is used to add the user control to the page, nothing further. Since the ASPX's responsibilities from the first and second implementations now fall firmly within the responsibility of the ASCX user control, my views are easily reusable throughout my application. I can drag a user control onto a new page and with it comes its presenter, all ready to go out of the box. </p>
<p>This example is implemented as the "Employee" module in the sample application. </p>
<div class=precollapse id=premain2 style="WIDTH: 100%"><img id=preimg2 style="CURSOR: pointer" height=9 src="http://www.codeproject.com/images/minus.gif" width=9 preid="2"><span id=precollapse2 style="MARGIN-BOTTOM: 0px; CURSOR: pointer" preid="2"> Collapse</span></div>
<pre id=pre2 style="MARGIN-TOP: 0px"><strong>Note: The code below is used to highlight the main points of this design. Please see the sample application for a working model.</strong>
<strong>The Presenter</strong>
public class Presenter
{
public Presenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
public void InitView(bool isPostBack)
{
if(!isPostBack)
{
view.SetProducts(model.GetProducts());
}
}
public void SaveProducts(IList&lt;IProduct&gt; products)
{
model.SaveProducts(products);
}
}
<strong>The ASPX Page</strong>
The ASPX HTML references the ASCX user control, nothing futher in code behind.
<strong>The ASCX User Control: The Starting Point</strong>
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
presenter = new Presenter(this,model);
presenter.InitView(Page.IsPostBack);
}
public void SetProducts(IList&lt;IProduct&gt; products)
{
<span class=cpp-comment>// bind products to view</span>
}
<strong>The View Interface</strong>
public interface IView
{
void SetProducts(IList&lt;IProduct&gt; products);
}
</pre>
<h2>Reflecting on the Implementations</h2>
<p>With each of the implementations, there are characteristics I favor and those I have difficulty accepting. Again, since there is no true MVP framework for ASP.NET as this time, there are no constraints forcing me to adhere to one implementation. Determining your flavor of MVP really depends on the level of separation of concerns with which you are most comfortable, and to what degree you feel your classes should be testable. </p>
<p>I like the use of the ASPX page as the "view initializer and page redirector" with the first two implementations. I feel that this is a well suited responsibility for the ASPX page that should not reside with the view. The view, in my opinion, should only be concerned with view-specific responsibilities. Determining what defines a view-specific responsibility is debatable and something I feel like I have wrestled with too often. </p>
<p>In the second implementation, I prefer how the view is ignorant of the presenter. The view is decoupled from the presenter. It only raises events, and the first event it raises, "OnViewLoad," signifies the control's loading state and passes the Page's IsPostBack value. The presenter listens for events on the view interface and commands the view to do some action when responding. The ASPX page instantiates the presenter, passing in the view instance and the model. It can register for events on the presenter as it needs. </p>
<p>What I do not like about the first two implementations is that since the ASPX page is involved, reusing the ASCX user control requires more work. If I want to add a user control to a different ASPX page, I now need to instantiate my model-view-presenter relationship in the new ASPX page. This becomes cumbersome when I have nested MVP relationships, where one user control may contain another user control. This dependency can be removed if I assign the responsibility of instantiating the presenter with the view and model from the ASPX page to the ASCX user control (view). As a result, the view now has more responsibility, but it is now more reusable. This added responsibility is something I may not agree with philosophically, but it helps improve usability, and my classes are still testable. </p>
<p>While I like the idea that my view is decoupled from the presenter in the event-driven approach, there really is no need for this separation. Using events is not always intuitive and reliable, and writing unit tests for events requires a little extra effort. There is no guarantee that the presenter subscribes to all the appropriate events on the view. </p>
<p>After settling my philosophical debates and finally feeling comfortable with certain responsibilities of the ASPX page, ASCX user control, and presenter in ASP.NET, I have created this third implementation. This third implementation is similar to the first implementation but it omits the role of the ASPX "view initializer and page redirector." On the positive side, my view is more reusable across my application since it is more self reliant. On the negative side, my view now has the added responsibility of creating the presenter and responding to events the presenter may raise. Even though I may feel that certain responsibilities are crossing boundaries, I keep reminding myself that this is MVP in ASP.NET - this is not a true MVC framework that enforces that good separation of concerns like <a href="http://www.castleproject.org/monorail/index.html" target=_blank><u><font color=#0000ff>Monorail</font></u></a>. </p>
<h2>Conclusion</h2>
<p>MVP provides a number of advantages, but to me, the two most important are separation of concerns and testability. There is a fair amount of overhead involved in using MVP, so if you are not planning on writing unit tests, I would definitely reconsider using the pattern. </p>
<p>As we see with the three different implementations, there are numerous ways to implement the pattern in ASP.NET. There are even more ways than what I have chosen to display. Choose an implementation that best suits your needs. I have to work hard at implementing MVP in ASP.NET, and there are certain tradeoffs I need to be willing to accept. As long as my code is testable, reusable, maintainable, and there exists a good degree of separation of concerns, I am happy. </p>
<p>With Microsoft's news of releasing an MVC framework for ASP.NET, there is hope on the horizon for a framework that enforces good separation of concerns and testability. The <a href="http://www.castleproject.org/monorail/index.html" target=_blank><u><font color=#0000ff>Castle Project's Monorail</font></u></a> is another MVC framework that I highly recommend. If you cannot wait for Microsoft's MVC framework, or do not wish to port your application to Monorail at this time, then implementing MVP could be your answer. </p>
<h2>About the Sample Project</h2>
<p>The sample project is written in ASP.NET 2.0 using C#. I am using the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en" target=_blank><u><font color=#0000ff>Northwind database</font></u></a>. I am using <a href="http://subsonicproject.com/" target=_blank><u><font color=#0000ff>SubSonic</font></u></a> as my data access layer. Since SubSonic is built using the active record pattern, I do have to use interfaces in order to make my DAO classes testable. For my unit testing, I am using <a href="http://www.ayende.com/projects/rhino-mocks.aspx" target=_blank><u><font color=#0000ff>RhinoMocks</font></u></a> as my mocking framework. </p>
<p>The sample application is comprised of five projects. The WebApp, Model, Presentation layer, Presentation.Tests, and SubSonic data access layer. This sample is simplistic and should be used as a demo. I may be doing some things in code for the sake of brevity and to simplify the concepts. This is my disclaimer for not providing "production" code with all the frameworks, tools, and layers I typically create. </p>
<h2>History</h2>
<p>Initial Upload: November 6, 2007.<br></p><img src ="http://www.cnitblog.com/seeyeah/aggbug/36127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-11-10 21:47 <a href="http://www.cnitblog.com/seeyeah/archive/2007/11/10/36127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax.Net浏览器辅助工具</title><link>http://www.cnitblog.com/seeyeah/archive/2007/10/01/34290.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 01 Oct 2007 15:07:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/10/01/34290.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/34290.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/10/01/34290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/34290.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/34290.html</trackback:ping><description><![CDATA[WebDevHelper<a href="http://projects.nikhilk.net/Projects/WebDevHelper.aspx"><br>http://projects.nikhilk.net/Projects/WebDevHelper.aspx</a> <br><br>Fiddler<br><a href="http://www.fiddlertool.com/">http://www.fiddlertool.com</a><br><br><font size=2>IE Developer <font color=#cc0033>Toolbar</font> <br>google搜索，无固定网址</font>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/34290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-10-01 23:07 <a href="http://www.cnitblog.com/seeyeah/archive/2007/10/01/34290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET AJAX入门系列 </title><link>http://www.cnitblog.com/seeyeah/archive/2007/03/15/24054.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Wed, 14 Mar 2007 16:31:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/03/15/24054.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/24054.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/03/15/24054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/24054.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/24054.html</trackback:ping><description><![CDATA[
		<h2>
				<a class="singleposttitle" id="viewpost1_TitleUrl" href="http://www.cnblogs.com/Terrylee/archive/2006/11/12/ASPNET_AJAX_QuickStarts.html">
						<font color="#223355">ASP.NET AJAX入门系列</font>
				</a>
		</h2>
		<div class="postbody">
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
						<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">ASP.NET AJAX</span>
						<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">入门系列将会写关于<span lang="EN-US">ASP.NET AJAX</span>一些控件的使用方法以及基础知识，其中部分文章为原创，也有一些文章是直接翻译自官方文档，本部分内容会不断更新。<span lang="EN-US"><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
						<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
						<strong style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">目录<span lang="EN-US"><o:p></o:p></span></span>
						</strong>
				</p>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/10/24/ASPNET_AJAX_Quick_Starts_Overview.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（1</span></span><span lang="EN-US"><span lang="EN-US">）：概述</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">导读：作为本系列文章的开篇，简单介绍一下<span lang="EN-US">ASP.NET AJAX</span>的概况及各个组成部分。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/10/25/ASPNET_AJAX_ScriptManager.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（2</span></span><span lang="EN-US"><span lang="EN-US">）：使用ScriptManager</span></span><span lang="EN-US"><span lang="EN-US">控件</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">导读：<span lang="EN-US">ScriptManager</span>控件包括在<span lang="EN-US">ASP.NET 2.0 AJAX Extensions</span>中，它用来处理页面上的所有组件以及页面局部更新，生成相关的客户端代理脚本以便能够在<span lang="EN-US">JavaScript</span>中访问<span lang="EN-US">Web Service</span>，所有需要支持<span lang="EN-US">ASP.NET AJAX</span>的<span lang="EN-US">ASP.NET</span>页面上有且只能有一个<span lang="EN-US">ScriptManager</span>控件。在<span lang="EN-US">ScriptManager</span>控件中我们可以指定需要的脚本库，或者指定通过<span lang="EN-US">JS</span>来调用的<span lang="EN-US">Web Service</span>，以及调用<span lang="EN-US">AuthenticationService</span>和<span lang="EN-US">ProfileService</span>，还有页面错误处理等。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/10/27/ASPNET_AJAX_ScriptManagerProxy.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（3</span></span><span lang="EN-US"><span lang="EN-US">）：使用ScriptManagerProxy</span></span><span lang="EN-US"><span lang="EN-US">控件</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">导读：在<span lang="EN-US">ASP.NET AJAX</span>中，由于一个<span lang="EN-US">ASPX</span>页面上只能有一个<span lang="EN-US">ScriptManager</span>控件，所以在有母版页的情况下，如果需要在<span lang="EN-US">Master-Page</span>和<span lang="EN-US">Content-Page</span>中需要引入不同的脚本时，这就需要在<span lang="EN-US">Content-page</span>中使用<span lang="EN-US">ScriptManagerProxy</span>，而不是<span lang="EN-US">ScriptManager</span>，<span lang="EN-US">ScriptManager </span>和<span lang="EN-US"> ScriptManagerProxy </span>是两个非常相似的控件。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/10/29/ASPNET_AJAX_UpdatePanel_Part1.html">
												<font color="#1d58d1">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（4</span></span><span lang="EN-US"><span lang="EN-US">）：使用UpdatePanel</span></span><span lang="EN-US"><span lang="EN-US">控件（一）</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">导读：<span lang="EN-US">UpdatePanel</span>可以用来创建丰富的局部更新<span lang="EN-US">Web</span>应用程序，它是<span lang="EN-US">ASP.NET 2.0 AJAX Extensions</span>中很重要的一个控件，其强大之处在于不用编写任何客户端脚本，只要在一个页面上添加几个<span lang="EN-US">UpdatePanel</span>控件和一个<span lang="EN-US">ScriptManager</span>控件就可以自动实现局部更新。通过本文来学习一下<span lang="EN-US">UpdatePanel</span>简单的使用方法（第一篇）。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/01/ASPNET_AJAX_UpdatePanle_Part2.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（5</span></span><span lang="EN-US"><span lang="EN-US">）：使用UpdatePanel</span></span><span lang="EN-US"><span lang="EN-US">控件（二）</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">导读：</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">UpdatePanel</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">可以用来创建丰富的局部更新</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">Web</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">应用程序，它是</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">ASP.NET 2.0 AJAX Extensions</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中很重要的一个控件，其强大之处在于不用编写任何客户端脚本，只要在一个页面上添加几个</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">UpdatePanel</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">控件和一个</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">ScriptManager</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">控件就可以自动实现局部更新。通过本文来学习一下</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">UpdatePanel</span>
								<span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其他的一些使用方法（第二篇）。</span>
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 200%; FONT-FAMILY: Verdana; mso-bidi-font-weight: bold">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/12/ASPNET_AJAX_UpdateProgress_Part1.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（6</span></span><span lang="EN-US"><span lang="EN-US">）：UpdateProgress</span></span><span lang="EN-US"><span lang="EN-US">控件简单介绍</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：在<span lang="EN-US">ASP.NET AJAX Beta2</span>中，<span lang="EN-US">UpdateProgress</span>控件已经从“增值”<span lang="EN-US">CTP</span>中移到了<span lang="EN-US">ASP.NET AJAX</span>核心中，本文简单介绍一些它的基本用法，翻译自官方文档。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/12/ASPNET_AJAX_UpdateProgress_Part2.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（7</span></span><span lang="EN-US"><span lang="EN-US">）：使用客户端脚本对UpdateProgress</span></span><span lang="EN-US"><span lang="EN-US">编程</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：在本篇文章中，我们将通过编写<span lang="EN-US">JavaScript</span>来使用客户端行为扩展<span lang="EN-US">UpdateProgress</span>控件，客户端代码将使用<span lang="EN-US">ASP.NET AJAX Library</span>中的<span lang="EN-US">PageRequestManager</span>，在<span lang="EN-US">UpdateProgress</span>控件中，将添加一个<span lang="EN-US">Button</span>，来允许用户取消异步更新，并且使用客户端脚本来显示或者隐藏进度信息，翻译自官方文档。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/13/Customizing_Error_Handling.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（8</span></span><span lang="EN-US"><span lang="EN-US">）：自定义异常处理</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：在<span lang="EN-US">UpdatePanel</span>控件异步更新时，如果有错误发生，默认情况下会弹出一个<span lang="EN-US">Alert</span>对话框显示出错误信息，这对用户来说是不友好的，本文看一下如何在服务端和客户端脚本中自定义异常处理，翻译自官方文档。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/13/Using_the_UpdatePanel_Control_with_Master_Pages.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（9</span></span><span lang="EN-US"><span lang="EN-US">）：在母版页中使用UpdatePanel</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：本文简单介绍一下在母版页中使用<span lang="EN-US">UpdatePanel</span>控件，翻译自官方文档。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/14/Introduction_to_the_Timer_Control.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（10</span></span><span lang="EN-US"><span lang="EN-US">）：Timer</span></span><span lang="EN-US"><span lang="EN-US">控件简单使用</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：本文主要通过一个简单示例，让<span lang="EN-US">Web</span>页面在一定的时间间隔内局部刷新，来学习一下<span lang="EN-US">ASP.NET AJAX</span>中的服务端<span lang="EN-US">Timer</span>控件的简单使用。<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<o:p> </o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<a href="http://www.cnblogs.com/Terrylee/archive/2006/11/15/Using_Timer_Control_with_More_Than_One_UpdatePanel_Control.html">
												<font color="#0066ff">ASP.NET AJAX<span lang="EN-US"><span lang="EN-US">入门系列（11</span></span><span lang="EN-US"><span lang="EN-US">）：在<span lang="EN-US">多个UpdatePanle</span></span></span><span lang="EN-US"><span lang="EN-US">中使用Timer</span></span><span lang="EN-US"><span lang="EN-US">控件</span></span></font>
										</a>
										<o:p>
										</o:p>
								</span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
								<span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
										<span style="mso-tab-count: 1">    </span>
								</span>
								<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">导读：本文将使用<span lang="EN-US">Timer</span>控件更新两个<span lang="EN-US">UpdatePanel</span>控件，<span lang="EN-US">Timer</span>控件将放在<span lang="EN-US">UpdatePanel</span>控件的外面，并将它配置为<span lang="EN-US">UpdatePanel</span>的触发器，翻译自官方文档<span lang="EN-US"><o:p></o:p></span></span>
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%">
						</p>
				</span>
		</div>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/24054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-03-15 00:31 <a href="http://www.cnitblog.com/seeyeah/archive/2007/03/15/24054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让您的Ajax应用加载数据时界面友好</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19877.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 02 Dec 2006 17:07:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19877.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19877.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19877.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19877.html</trackback:ping><description><![CDATA[
		<font size="2">Ajax火啊，火到了居然Loading Icons都有很多人专门提供的地步。下面是我同事给我介绍的一些提供Ajax Activity Indicators的网站，共享给大家，以便让我们的Ajax应用具有更好的用户体验。<br /><br />    </font>
		<a href="http://www.ajaxload.info/">
				<font size="2">http://www.ajaxload.info/</font>
		</a>
		<br />
		<font size="2">    <img height="177" alt="AjaxLoad.png" src="http://www.cnblogs.com/images/cnblogs_com/birdshome/NormalArticle/2006/AjaxLoad.png" width="525" border="0" /><br />    // 可以自己根据需求创建Ajax Indicators，不过动态效果都是转圈圈@_@<br /><br /><br />    </font>
		<a href="http://mentalized.net/activity-indicators/">
				<font size="2">http://mentalized.net/activity-indicators/</font>
		</a>
		<br />
		<font size="2">    <img height="239" alt="ActivityIndicators.png" src="http://www.cnblogs.com/images/cnblogs_com/birdshome/NormalArticle/2006/ActivityIndicators.png" width="479" border="0" /><br /><br /><br />    </font>
		<a href="http://www.napyfab.com/ajax-indicators/">
				<font size="2">http://www.napyfab.com/ajax-indicators/</font>
		</a>
		<br />
		<font size="2">    <img height="275" alt="AjaxIndicators.png" src="http://www.cnblogs.com/images/cnblogs_com/birdshome/NormalArticle/2006/AjaxIndicators.png" width="550" border="0" /><br />    // 这个站点的样式比较丰富，推荐哦!~<br /></font>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/19877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-03 01:07 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/03/19877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>