表单内的asp-action不会传递给控制器

时间:2019-02-23 19:02:59

标签: c# asp.net-core asp.net-core-mvc

我有一个表格:

@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未触发。尝试了这些解决方案,但是没有用。

任何帮助将不胜感激。

1 个答案:

答案 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>

希望这会有所帮助。