我对ASP.NET和MVC(我通常在winforms / wpf中工作)相对较新,我正在尝试自学基础知识。我正在尝试创建一个简单的待办事项列表样式,在文本框中输入一行文本,单击添加按钮,然后填充下面的列表。
这是我的视图(Index.cshtml),它位于Views> ToDo文件夹中:
@{
ViewBag.Title = "Index";
}
@model List<Models.ToDoListItem>
<h2>To Do List</h2>
<form asp-action="Create" asp-controller="ToDo" asp-method="post">
<div>
<input name="ToDoItem"/>
<input type="submit" value="Add Task"/>
</div>
</form>
<div>
<ul>
@if (Model != null)
{
foreach (var item in Model)
{
<li>
<label>@item.ItemText</label>
</li>
}
}
</ul>
</div>
这是我的Controller ToDoController.cs
,它位于Controllers文件夹
public class ToDoController : Controller
{
// GET: ToDo
public ActionResult Index()
{
return View(Models.ToDoListItem.GetAll());
}
[HttpPost] //This was added as suggested in comments and answers
public ActionResult Create(string toDoItem)
{
Models.ToDoListItem.Create(toDoItem);
return RedirectToAction("Index");
}
}
根据我的阅读,将动作Create
添加到我的表单标记的ToDocontroller
部分应该将我的提交按钮点击映射到我的{中的“创建”ActionResult
方法{1}}上课。
当我在create方法上使用断点运行我的代码时,单击提交按钮不会触发断点,也不会将任何内容添加到列表中。
如果有人知道我哪里出错了,一些帮助将非常感激。
感谢。
答案 0 :(得分:1)
首先,您发布的HTML适用于与Index
方法相对应的public ActionResult Index()
视图。
其次,为了使提交按钮起作用,您需要在控制器中使用HttpPost ActionResult Create
方法。您发布的是HttpGet ActionResult Create
方法。
这些方面的东西:
/*public ActionResult Create()
{
return View();
}*/
// the code above is only necessary if you decide to create your own separate Create View
[HttpPost]
public ActionResult Create(string toDoItem)
{
Models.ToDoListItem.Create(toDoItem);
return RedirectToAction("Index");
}
如果有帮助,请告诉我。