Model nie przekazuje parametru string - Razor Pages

0

Cześć,

Nie wiem gdzie skopałem kod, ale z widoku do kontrolera nie trafia moja właściwość Day.DayName. Id trafia normalnie tak jak MealsToSelect...
Moja metoda przechwytująca żądanie POST:

   public IActionResult OnPost(DayModel dayModel)
        {
            //myCode
         }

Mój html

@page
@model MealApp.Pages.DayDiet.AddDayModel
@{
    <h1>Dodawanie dnia diety</h1>

    <form method="post" class="mt-3">
        <input hidden asp-for="@Model.Day.Id" />
        <div class="form-group row">
            <label asp-for="@Model.Day.DayName" class="col-sm-2 col-form-label">
            </label>
            <div class="col-sm-10">
                <input asp-for="@Model.Day.DayName" class="form-control" placeholder="Nazwa dnia">
            </div>
        </div>
        <div class="form-group row">
            <label asp-for="Day.MealsToSelect" class="col-sm-2 col-form-label">
            </label>
            <div class="col-sm-10">
                @Html.ListBox("ids", @Model.Day.MealsToSelect, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group row">
            <div class="col-sm-10">
                <button type="submit" class="btn btn-primary">Utwórz dzień diety</button>
                <a asp-page="/DayDiet/Index" class="btn btn-danger">Cancel</a>
            </div>
        </div>
    </form>
}

I na koniec mój model:

    public class DayModel
    {
        public int Id { get; set; }
        public string DayName { get; set; }
        public int DietId { get; set; }
        public List<DayDietMeals> DayDietMeals { get; set; }
        [DisplayName("Posiłki do wyboru")]
        public MultiSelectList MealsToSelect { get; set; }
        public int[] ids { get; set; }
    }
0

Nie wiem czy to ma znaczenie ale widzę różnicę w labelkach
tu używasz @Model

<label asp-for="@Model.Day.DayName" class="col-sm-2 col-form-label">

a niżej już nie

<label asp-for="Day.MealsToSelect" class="col-sm-2 col-form-label">
0

To nie ma znaczenia. Też o tym myślałem ale już próbowałem w te stronę pójść..

Dorzucam też metode OnGet i properties'y:

        public DayModel Day { get; set; }
        public string Name { get; set; }
        public IActionResult OnGet(int dietId)
        {
            var meals = mealRepository.GetAllMeals();
            Day = new DayModel()
            {
                DietId = dietId,
                MealsToSelect = new MultiSelectList(meals, "Id", "MealName")
            };
            return Page();
        }
0

Zobacz w przeglądarce(narzędzia deweloperskie, sieć) co dokładnie wysyła się w żądaniu HTTP, jaka jest zawartość formularza.

0

Ogólnie dziwna sprawa, wyrzuciłem te wszystkie propertisy zostawiłem tylko model z adnotacją:

        [BindProperty]
        public DayModel Day { get; set; }

Teraz metoda POST wygląda tak (brak parametru):

 public IActionResult OnPost()
        {
            var dayDietMeals = new List<DayDietMeals>();
            foreach (var i in Day.ids)
            {
                dayDietMeals.Add(new DayDietMeals()
                {
                    MealId = i
                });
            }

            var day = new Day()
            {
                DietId = Day.DietId,
                DayName = Day.Name,
                DayDietMeals = dayDietMeals
            };

            dayDietRepository.AddDayDiet(day);

            return RedirectToPage("/Diets/Index");
        }

Działa jak należy...

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