Cześć, wcześniej pchałem encję bezpośrednio na widok, ale że projekt się trochę rozrósł to stwierdziłem, że zbuduję DTO. Co też uczyniłem. Problem w tym, że po tej zmianie model nie trafia w metodzie POST do kontrolera. Poniżej moja RazorPage oraz widok:
public class AddDietModel : PageModel
{
private readonly IDietRepository dietRepository;
public Models.Models.DietDTO Diet { get; set; }
public AddDietModel(IDietRepository dietRepository)
{
this.dietRepository = dietRepository;
}
public IActionResult OnGet()
{
return Page();
}
public IActionResult OnPost(Models.Models.DietDTO dietDTO)
{
if (ModelState.IsValid)
{
var diet = new Models.Diet()
{
Id = dietDTO.Id,
Description = dietDTO.Description,
DietName = dietDTO.DietName
};
dietRepository.AddDiet(diet);
}
return RedirectToPage("Index");
}
}
@page
@model MealApp.Pages.Diet.AddDietModel
@{
}
<h1>Dodawanie diety</h1>
<form method="post" class="mt-3">
<input type="hidden" asp-for="Diet.Id" />
<div asp-validation-summary="ModelOnly"></div>
<div class="form-group row">
<label asp-for="@Model.Diet.DietName" class="col-sm-2 col-form-label">
Nazwa diety
</label>
<div class="col-sm-8">
<input asp-for="@Model.Diet.DietName" class="form-control" />
<span asp-validation-for="@Model.Diet.DietName" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<label asp-for="@Model.Diet.Description" class="col-sm-2 col-form-label">
Ogólny opis diety
</label>
<div class="col-sm-8">
<textarea rows="5" asp-for="@Model.Diet.Description" class="form-control"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button class="btn btn-primary" type="submit">Utwórz dietę</button>
<a asp-page="/Diets/Index" class="btn btn-danger">Anuluj</a>
</div>
</div>
</form>
@section Scripts {
<partial name="~/Pages/Shared/_ValidationScriptsPartial.cshtml" />
}