技术开发 频道

为ASP.NET MVC框架添加AJAX支持

(二)控制器

   本示例中提供了一个简单的控制器TaskListController。控制器中定义了几个Action方法。下面列出了其中的两个方法:
 

public class TaskListController : Controller {
private ITaskDB _taskDB;
public TaskListController() : this(GlobalTaskDB) { }
public TaskListController(ITaskDB taskDB)
{
_taskDB = taskDB;
}

//示例URL: /TaskList或者/TaskList/List
[ControllerAction]
public void List() {
Dictionary<string, object> viewData = new Dictionary<string, object>();
viewData["Tasks"] = _taskDB.GetTasks();

RenderView("List", viewData);
}

//示例URL: /TaskList/Add
[ControllerAction]
public void Add(string name) {
Task newTask = null;
if (String.IsNullOrEmpty(name) == false) {
newTask = _taskDB.AddTask(name);
}

if (newTask != null) {
RedirectToAction("List");
}
else {
Dictionary<string, object> viewData = new Dictionary<string, object>();
viewData["Tasks"] = _taskDB.GetTasks();
viewData["ShowAddTaskError"] = true;
RenderView("List", viewData);
}
}

//其他的Action方法:例如DeleteTask, CompleteTask
}

 
(三)视图

   接下来,让我们讨论本示例的视图部分。本示例的视图页面是List.aspx,定义于示例程序的/Views/TaskList文件夹下。下面给出了一些令人感兴趣的标记代码:
 

<div id="taskList">
<% foreach (Task task in Tasks) { %>
<div>
<div id="taskItem<%= task.ID %>" class="taskPanel">
<form method="post" action='<% Url.Action("CompleteTask") %>'>
<input type="hidden" name="taskID" value="<%= task.ID %>" />
<input type="submit" name="completeTask" value="Done!" />
<input type="submit" name="deleteTask" value="Delete" />
<span><%= Html.Encode(task.Name) %></span>
</form>
</div>
</div>
<% } %>
</div>

<form method="post" action='<%= Url.Action("Add") %>'>
<input type="text" name="name" />
<input type="submit" name="addTask" value="Add Task" />
</form>

 
(四)单元测试

   最后,我们来看一下本示例中的单元测试部分的编码。在本例中,测试用例定义于一个单独的Test工程。下面给出了本示例控制器中定义的Add方法相关的一组测试:
 

public void TestAddEmptyName() {
TestTaskDB taskDB = new TestTaskDB();
taskDB.AddTask("Test Task 1");
taskDB.AddTask("Test Task 2");

TestTaskListController controller = new TestTaskListController(taskDB);

controller.Add(null);

Assert.AreEqual("List", controller.RenderedView);
Assert.AreEqual(true, controller.GetRenderedViewData("ShowAddTaskError"));
Assert.AreEqual(2, taskDB.Count);
}

[TestMethod]
public void TestAddValidName() {
TestTaskDB taskDB = new TestTaskDB();
taskDB.AddTask("Test Task 1");
taskDB.AddTask("Test Task 2");

TestTaskListController controller = new TestTaskListController(taskDB);

controller.Add("New Task");

Assert.AreEqual("List", controller.RedirectedView);
Assert.AreEqual(3, taskDB.Count);
}

 
   好,至此我已经较完整地向你介绍了本文中编写的简单的TaskList应用程序。接下来,让我们讨论如何在这个示例中添加一些Ajax支持功能。下面列出了我们计划要添加的一些功能:

   1. 在任务列表中添加新任务(位于列表的最后)而不必进行完整的页面回送;
   2. 编辑和删除任务,同样不必进行完整的页面回送;
   3. 在文本框中添加水印效果。

   为了实现上面的既定目标和最大限度地把新添加的功能与原有ASP.NET MVC框架融合到一起,我们使用了System.Web.Mvc命名空间中新增加的一些类,例如Ajax扩展方法等。
 

0
相关文章