Andrea
Andrea

Reputation: 247

asp-action inside form doesn't go to controller

I have a form :

@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>

I call it in the Index.html

@await Html.PartialAsync("AddItemPartial", new TodoItem())

that calls the controller on button click :

public async Task<IActionResult> AddItem(TodoItem newItem)
{ 
  //code that calls service...
}

I never hit a breakpoint on AddItem, I read that it might be from the asp-action not firing due to _ViewImports.cshtml not being in the same folder or that it didn't cointain @addTagHelper. Tried those solutions, but didn't work.

Any help would be appreciated.

Upvotes: 4

Views: 3644

Answers (2)

user16612111
user16612111

Reputation:

When @Andrea mentioned that adding the file _ViewImports might resolve the issue, I tried it on my project where the data wasn't being forwarded to the controller and it worked.

Upvotes: 0

Manoj Choudhari
Manoj Choudhari

Reputation: 5624

I think when you use asp-action, you should only specify action name and not the complete path.

For ex. If below is the code in your page:

<form asp-controller="Demo" asp-action="Register" method="post">
    <!-- Input and Submit elements -->
</form>

This code is converted to below code:

<form method="post" action="/Demo/Register">
    <!-- Input and Submit elements -->
    <input name="__RequestVerificationToken" type="hidden" value="<removed for brevity>" />
</form>

Please check that after the server side code converted to HTML, there is no asp-action, there is only action attribute understood by HTML form.

For you, you will have to change code to :

@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>

Hope this helps.

Upvotes: 5

Related Questions