UpdatePanel for ASP.NET MVC的嘗試

來源:互聯網
上載者:User

其實這是一篇遲發布近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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.