自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET MVC框架拯救UpdatePanel

開發(fā) 后端
本文介紹ASP.NET MVC框架拯救UpdatePanel,UpdatePanel就失去了全部作用,甚至不如一些綁定控件,至少它們還能夠用于展示。

什么是“拯救UpdatePanel for ASP.NET MVC框架”呢?ASP.NET AJAX中的UpdatePanel相信大家都有所了解??上У氖牵珹SP.NET MVC框架的誕生“毀滅”了大量基于PostBack的控件,首當其沖地可能就是UpdatePanel了。如果沒有 PostBack,UpdatePanel就失去了全部作用,甚至不如一些綁定控件,至少它們還能夠用于展示。為UpdatePanel長吁短嘆之后,我們不禁又開始懷念UpdatePanel的優(yōu)勢:“透明”。在UpdatePanel的幫助下,實現(xiàn)AJAX操作對于開發(fā)人員幾乎完全透明。我們要做的僅僅是將需要AJAX更新的內容用UpdatePanel包裝起來,一切都是那么優(yōu)雅。

我們能否在ASP.NET MVC中拯救UpdatePanel呢?也許是可以的吧,但這更像是一個“不可能完成的任務”。我不是傳說中的阿湯哥,因此重新為ASP.NET MVC量身定制一個AJAX解決方案似乎更為可行。雖然我們不會苛求一個新生事物從誕生開始就趨向完美,但即使只是一個原型,它也必須嚴格遵守的一些原則:

不得破壞MVC中的協(xié)議(協(xié)作,職責等等)

對開發(fā)人員盡可能地透明

Nikhil Kothari曾經(jīng)提出了他在ASP.NET MVC框架下的AJAX解決方案。如果您還不了解他的做法,那么我先在這里進行一點概括。Nikhil擴展了Controller使之支持一種Ajax操作,于是我們在代碼中就可以寫如下代碼:

  1. publicclassTaskListController:AjaxController{  
  2. ...  
  3. publicvoidCompleteTask(inttaskID){  
  4. if(String.IsNullOrEmpty(Request.Form["deleteTask"])==false){  
  5. InvokeAction("DeleteTask");  
  6. return;  
  7. }  
  8.  
  9. Tasktask=_taskDB.GetTask(taskID);  
  10. if(task!=null){  
  11. _taskDB.CompleteTask(task);  
  12. }  
  13.  
  14. if(IsAjaxRequest){  
  15. if(task!=null){  
  16. RenderPartial("TaskView",task);  
  17. }  
  18. }  
  19. else{  
  20. RedirectToAction("List");  
  21. }  
  22. }  
  23. ...  

與AjaxController類似,Nikhil也為ViewPage和ViewControl提供了一些擴展方法,因此目前在View(List.aspx)中我們就能看到如下的代碼:

  1. divid="taskList">  
  2. <%foreach(TasktaskinTasks){%>  
  3. <div>  
  4. <%this.RenderPartial("TaskView",task);%>  
  5. </div>  
  6. <%}%>  
  7. </div> 

在View和Controller中都存在對于RenderPartiel方法的調用,它們的作用就是向客戶端輸出一個“Partial Template”生成的HTML代碼。而在ASP.NET MVC的默認配置中,Partial Template即為User Control。而在TaskView這個Partial Template中可以看到一些輔助方法:

  1. divid="taskItem<%=Task.ID%>"class="taskPanel">  
  2. <%Ajax.Initialize();%>  
  3. <%this.RenderBeginAjaxForm(  
  4. Url.Action("CompleteTask"),  
  5. new{  
  6. Update="taskItem"+Task.ID,  
  7. UpdateType="replace",  
  8. Completed="endUpdateTask"});%>  
  9.  
  10. inputtype="hidden"name="taskID"value="<%=Task.ID%>"/>  
  11. inputtype="submit"class="completeButton"name="completeTask"value="Done!"/>  
  12. inputtype="submit"class="deleteButton"name="deleteTask"value="Delete"/>  
  13. <span><%=Html.Encode(Task.Name)%></span>  
  14.  
  15. <%this.RenderEndForm();%>  
  16. <%Ajax.RenderScripts();%>  
  17. </div> 


這些輔助方法的作用是生成一些觸發(fā)AJAX更新的標簽及腳本,當用戶點擊RenderBeginAjaxForm與RenderEndForm方法生成的tag之間的提交按鈕時,網(wǎng)頁將會向服務器端發(fā)出一個AJAX請求,而服務器端的Action并最終會通過RenderPartial方法輸出一個Partial Template生成的HTML。服務器端最終輸出的HTML將會被替換或添加到頁面的某個元素內。這就形成了一個AJAX效果。這個解決方案從某些方面看上去很酷,尤其是生成的代碼可以添加到某個元素中,而不單單是如同UpdatePanel的替換,例如Nikhil在他的例子中就使用了這個特性實現(xiàn)了一個添加功能。不過如果使用之前提出的原則來衡量的話,似乎這個解決方案并不十分理想。以上介紹ASP.NET MVC框架拯救UpdatePanel

【編輯推薦】

  1. ASP.NET的AsyncState參數(shù)
  2. ASP.NET MVC執(zhí)行異步Action
  3. 概述ASP.NET MVC框架
  4. ASP.NET MVC中使用UpdataModel方法
  5. ASP.NET MVC的Action方法
責任編輯:佚名 來源: IT專家網(wǎng)
相關推薦

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-29 13:43:52

UpdatePanelASP.NET

2009-07-22 10:09:59

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2010-06-23 15:44:03

ASP.NET MVC

2009-03-13 10:58:48

ASP.NetMVC框架編程

2014-06-30 09:22:38

ASP.NETBootstrap

2009-07-21 09:43:36

調用UpdatePanASP.NET

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功

2009-07-31 12:43:59

ASP.NET MVC

2009-06-01 10:23:31

asp.net mvcasp.net mvc.net mvc框架

2009-07-20 15:51:40

FubuMVC核心框架ASP.NET MVC

2009-07-24 10:55:00

asp.net mvc

2009-07-21 09:18:02

UpdatePanelASP.NET AJA

2010-03-23 08:42:26

ASP.NET MVC

2009-12-17 15:07:16

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號