【问题标题】:asp-action inside form doesn't go to controller表单内的 asp-action 不会转到控制器
【发布时间】:2019-02-25 13:59:34
【问题描述】:

我有一个表格:

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

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我认为当您使用 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>
    

    希望这会有所帮助。

    【讨论】:

    • 不幸的是它不起作用,当我将Todo放入asp-controller时它返回404,如果我输入全名TodoController它和以前一样
    • 原来它适用于其他控制器,只是不是这个,所以问题出在其他地方,这对我有帮助,谢谢
    • 是控制器里面的参数,我单独提出了这个问题stackoverflow.com/questions/54850208/…
    • 很高兴它有帮助。
    • 如果你能看一下更详细的问题,那就太好了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2020-09-14
    • 2019-07-01
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多