ASP.NET MVC 無 PostBack,傳統 UpdatePanel 失效。需尋找替代 AJAX 方案,原則:不破壞 MVC 協定、對開發者透明。
擴充 AjaxController 支援 IsAjaxRequest、InvokeAction、RenderPartial:
public class TaskListController : AjaxController {
public void CompleteTask(int taskID) {
if (Request.Form["deleteTask"] != null) { 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");
}
}
<div id="taskList">
<% foreach (Task task in Tasks) { %>
<div><% this.RenderPartial("TaskView", task); %></div>
<% } %>
</div>
此原型展示如何在 MVC 中實現局部更新,後續演變為官方 AjaxHelper 與 JsonResult。