I'm using the latest preview of Asp.Net Core. I have a page with pretty simple edit form and some additional data displayed.
@model SeasonFullDetailsViewModel
.....
<form asp-action="Save">
<div class="form-horizontal">
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="SeasonId" />
<div class="form-group">
<label asp-for="Season" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Season" class="form-control" />
<span asp-validation-for="Season" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="IsFinal" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="IsFinal" class="form-control" />
<span asp-validation-for="IsFinal" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
</form>
The problem is that I can't get form data to be submitted into a model, only as separate fields.
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(int seasonId, string season, bool isFinal)
{
// values are ok
return new EmptyResult();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(SeasonFullDetailsViewModel season)
{
// empty values inside season
return new EmptyResult();
}
I think the problem is that model uses inheritance and data from the form is contained in parent classes.
public class SeasonFullDetailsViewModel : SeasonDetailsViewModel
{
// some data here
}
public class SeasonDetailsViewModel : SeasonBaseViewModel
{
public bool IsFinal { get; set; }
// also some other data
}
public class SeasonBaseViewModel
{
public int SeasonId { get; set; }
public string Season { get; set; }
// and some more data
}
I have tried to use a simpler model, but it doesn't work either.
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(SeasonEditModel season)
{
// empty values inside season
return new EmptyResult();
}
public class SeasonEditModel
{
public int SeasonId { get; set; }
public string Season { get; set; }
public bool IsFinal { get; set; }
}
I know I can use Ajax to send data or just create the needed model from separate fields, but I want to find out what is the problem here and if there is a way to overcome it. Why the solution with SeasonEditModel doesn't work?