DTO nie trafia do kontrolera

0

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" />
}
0

Deklarujesz typ modelu w widoku inny i typ obiektu w parametrze OnPost jest inny?

0

@urke: spójrz:
screenshot-20210120210810.png

0

Twój post endpoint oczekuje DietDto a w widoku używasz AddDietModel

1 użytkowników online, w tym zalogowanych: 0, gości: 1