Reputation: 64
How can you send a form in a POST request, to another data model (not the one in the view)?
I have UserModel and FilterRequest Models.
To filter the data do I need to post a request to an IndexFilter with a FilterRequest filtering model?
Help Please, how can I do this?
View/User/Index.cshtml
@model UserModel
@using (Html.BeginForm("IndexFilter", "User", FormMethod.Post))
{
<input type="hidden" name ="pageNumber" value="@Model.PaginationModel.PageNumber"/>
<div>
<label>First Name</label>
@Html.TextBoxFor(m => m.FilterData.FirstName)
</div>
<div>
<label>Last Name</label>
@Html.TextBoxFor(m => m.FilterData.LastName)
</div>
<input type="submit" value="Filter" />
}
UserController.cs
[HttpPost]
public IActionResult IndexFilter([FromBody] FilterRequest request)
{
}
UserModel.cs
public class UserModel
{
public IList<User> Users{ get; set; }
public PaginationModel PaginationModel { get; set; }
public FilterData FilterData { get; set; }
}
FilterRequest.cs
public class FilterRequest
{
public int PageNumber { get; set; } = 1;
public FilterData FilterData { get; set; }
}
A Post request is sent to the server, with Form Data
pageNumber=1&FilterData.FirstName=&FilterData.LastName=Nikita&__RequestVerificationToken=Token
The server replied with 415.
Upvotes: 0
Views: 498
Reputation: 4022
Change to [FromForm]
.
[HttpPost]
public IActionResult IndexFilter([FromForm] FilterRequest request)
{
//...
return Ok();
}
Test Code
public class UserController : Controller
{
public IActionResult Index()
{
UserModel user = new UserModel()
{
PaginationModel = new PaginationModel { PageNumber = 100 },
FilterData = new FilterData { FirstName = "Ada", LastName = "Michael" }
};
return View(user);
}
[HttpPost]
public IActionResult IndexFilter([FromForm] FilterRequest request)
{
return Ok();
}
}
Screenshot of Debugging
Upvotes: 1