表单内的 asp-action 不会进入控制器

And*_*rea 4 c# asp.net-core-mvc asp.net-core

我有一个表格:

@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>
Run Code Online (Sandbox Code Playgroud)

我在 Index.html 中调用它

@await Html.PartialAsync("AddItemPartial", new TodoItem())
Run Code Online (Sandbox Code Playgroud)

单击按钮时调用控制器:

public async Task<IActionResult> AddItem(TodoItem newItem)
{ 
  //code that calls service...
}
Run Code Online (Sandbox Code Playgroud)

我从未在 AddItem 上遇到断点,我读到它可能是由于 _ViewImports.cshtml 不在同一文件夹中或者它不包含 @addTagHelper 导致 asp 操作未触发。尝试了这些解决方案,但没有成功。

任何帮助,将不胜感激。

Man*_*ari 5

我认为当你使用asp-action时,你应该只指定动作名称而不是完整路径。

对于前。如果您的页面中的代码如下:

<form asp-controller="Demo" asp-action="Register" method="post">
    <!-- Input and Submit elements -->
</form>
Run Code Online (Sandbox Code Playgroud)

该代码转换为以下代码:

<form method="post" action="/Demo/Register">
    <!-- Input and Submit elements -->
    <input name="__RequestVerificationToken" type="hidden" value="<removed for brevity>" />
</form>
Run Code Online (Sandbox Code Playgroud)

请检查服务器端代码转换为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>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。