我有一个表格:
@model TodoItem
<form asp-action="/Todo/AddItem" method="POST">
<label asp-for="Title">Add a new item:</label>
<input asp-for="Title">
<button type="submit">Add</button>
</form>
我在Index.html中称呼它
@await Html.PartialAsync("AddItemPartial", new TodoItem())
在按钮上单击调用控制器:
public async Task<IActionResult> AddItem(TodoItem newItem)
{
//code that calls service...
}
我从没在AddItem上遇到断点,我读到它可能是由于_ViewImports.cshtml不在同一个文件夹中或者不包含@addTagHelper而导致的asp-action未触发。尝试了这些解决方案,但是没有用。
任何帮助将不胜感激。
答案 0 :(得分:2)
我认为当您使用asp-action时,您应该只指定动作名称,而不是完整路径。
例如如果以下是您页面中的代码:
<form asp-controller="Demo" asp-action="Register" method="post">
<!-- Input and Submit elements -->
</form>
此代码将转换为以下代码:
<form method="post" action="/Demo/Register">
<!-- Input and Submit elements -->
<input name="__RequestVerificationToken" type="hidden" value="<removed for brevity>" />
</form>
请检查服务器端代码转换为HTML之后,没有asp-action,只有HTML形式可以理解的action属性。
对于您来说,您将必须将代码更改为:
@model TodoItem
<form asp-controller="Todo" asp-action="AddItem" method="POST">
<label asp-for="Title">Add a new item:</label>
<input asp-for="Title">
<button type="submit">Add</button>
</form>
希望这会有所帮助。