程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> UpdatePanel for ASP.NET MVC的嘗試

UpdatePanel for ASP.NET MVC的嘗試

編輯:關於ASP.NET

其實這是一篇遲發布近2個月的文章。事實上在ASP.NET MVC Preview 2發布之 前我就已經將這篇文章的所有內容准備完畢了。當時想,就等Preview 2發布吧, 而真一旦Preview 2發布之後卻又懶得進行移植——移植了之後卻又懶 得寫文章。這一拖就是近2個月,毫無長進。可能工作等其他事情的確多了些,但 是扪心自問,也並沒有忙到不可開交。時間往往都是在點點滴滴間浪費的。唉, 可能是自視太高,越來越不願意寫一些普普通通的介紹性文章,導致可寫的東西 大大減少。不過話說回來,其實打算寫的,甚至多次說過要寫得東西也並不少, 為什麼就就是沒有動筆呢?其實還是一個“懶”字——當 年的勤奮勁兒到哪裡去了呢?

言歸正傳。先解釋一下標題,什麼是“UpdatePanel for ASP.NET MVC”呢?ASP.NET AJAX中的UpdatePanel相信大家都有所了解。可惜的是, ASP.NET MVC框架的誕生“毀滅”了大量基於PostBack的控件,首當其 沖地可能就是UpdatePanel了。如果沒有PostBack,UpdatePanel就失去了全部作 用,甚至不如一些綁定控件,至少它們還能夠用於展示。為UpdatePanel長吁短歎 之後,我們不禁又開始懷念UpdatePanel的優勢:“透明”。在 UpdatePanel的幫助下,實現AJAX操作對於開發人員幾乎完全透明。我們要做的僅 僅是將需要AJAX更新的內容用UpdatePanel包裝起來,一切都是那麼優雅。

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

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

對開發人員盡 可能地透明

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

public class TaskListController : AjaxController {
   ...
  public void CompleteTask(int taskID) {
    if (String.IsNullOrEmpty(Request.Form["deleteTask"]) == false) {
      InvokeAction("DeleteTask");
       return;
    }
    Task task = _taskDB.GetTask (taskID);
    if (task != null) {
       _taskDB.CompleteTask(task);
    }
    if (IsAjaxRequest) {
      if (task != null) {
         RenderPartial("TaskView", task);
      }
    }
    else {
      RedirectToAction ("List");
    }
  }
  ...
}

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

<div id="taskList">
  <% foreach (Task task in Tasks) { %>
    <div>
      <% this.RenderPartial("TaskView", task); %>
     </div>
  <% } %>
</div>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved