如何将我的简单 MVC4 待办事项列表应用程序转换为 AJAX?
理想的答案将为我提供将这个示例成功转换为 AJAX 的步骤。
注意:我不需要 AJAX 教程,而是了解 ASP.NET MVC 架构如何支持它。
附带问题:为什么@Html.EditorFor(model => model.TodoItemToCreate)
即使视图模型设置为 ,也会带回输入的值this.TodoItemToCreate = null
?
模型
public class TodosViewModel
{
List<string> todoItems;
public List<string> TodoItems
{
get { return this.todoItems ?? (todoItems = new List<string>()); }
}
[Display(Name="What do you need to do?")]
public string TodoItemToCreate { get; set; }
public bool AcceptTodoItem()
{
bool isThereAnItemToAccept = !string.IsNullOrWhiteSpace(this.TodoItemToCreate);
if (isThereAnItemToAccept)
{
this.TodoItems.Add(this.TodoItemToCreate);
this.TodoItemToCreate = null;
}
return isThereAnItemToAccept;
}
}
控制器
public class TodosController : Controller
{
public ActionResult Index()
{
return View(new TodosViewModel());
}
public ActionResult Create(TodosViewModel todosViewModel)
{
todosViewModel.AcceptTodoItem();
return View("Index", todosViewModel);
}
}
索引视图
@model Programming.LearnWeb.Models.TodosViewModel
@{
ViewBag.Title = "Todos";
}
@using (Html.BeginForm("Create", "Todos"))
{
@Html.Partial("List")
@Html.LabelFor(model => model.TodoItemToCreate)
@Html.EditorFor(model => model.TodoItemToCreate)
<input type="submit" value="Create" />
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
列表显示
@model Programming.LearnWeb.Models.TodosViewModel
@{ int i = 0; }
<table>
@foreach (var todoItem in Model.TodoItems)
{
<tr>
<td>
@Html.Hidden("TodoItems[" + i++ + "]", todoItem)
@todoItem
</td>
</tr>
}
</table>