Cześć,
Przedstawię Wam swój kod, który (jestem o tym przekonany) da się napisać lepiej, schludniej i na pewno dużo bardziej wydajnie. Niestety jak się nad czymś siedzi zbyt długo to zaślepia to dostępne ścieżki i tak też jest w moim przypadku. Nie mam pojęcia jak to lepiej napisać... Już tłumaczę o co chodzi:
W moim kontrolerze mam metodę GetMealsByType(), która odpowiedzialna jest za pobranie posiłków wg ich rodzaju (posiłki na śniadanie, na obiad, kolację itp). Rodzaj posiłku jest niezmienny i jego id przekazuję w parametrze metody MealByType. Problem w tym, że ten kod wygląda słabo, cała metoda GetMealsByType(), a także sam model. Niestety nie wiem jak lepiej to przedstawić. Na widoku dla użytkownika mam kolejno 5 dropdownów (dla każdego rodzaju posiłku), z których user wybiera konkretny posiłek. Id'ki tych posiłków z kolei są ładowane do [] ids
a następnie iterując po nich dodaję kolejne elementy do klasy DayDietMeals
, która odwzorowuje relacje many-to-many i w obiekcie day
dodawana jest do bazy.
Mój kontroler
public class AddDayModel : PageModel
{
private readonly IDayDietRepository dayDietRepository;
private readonly IMealRepository mealRepository;
public AddDayModel(IDayDietRepository dayDietRepository,
IMealRepository mealRepository)
{
this.dayDietRepository = dayDietRepository;
this.mealRepository = mealRepository;
}
[BindProperty]
public DayModel Day { get; set; }
public IActionResult OnGet(int dietId)
{
GetMealsByType();
return Page();
}
private void GetMealsByType()
{
Day = new DayModel();
Day.Breakfast = mealRepository.MealByType(6).ToList();
Day.Brunch = mealRepository.MealByType(7).ToList();
Day.Lunch = mealRepository.MealByType(8).ToList();
Day.Tea = mealRepository.MealByType(4).ToList();
Day.Dinner = mealRepository.MealByType(9).ToList();
}
public IActionResult OnPost()
{
var dayDietMeals = new List<DayDietMeals>();
var typeOfMealId = 1;
foreach (var i in Day.ids)
{
dayDietMeals.Add(new DayDietMeals()
{
MealId = i,
TypeOfMeal = typeOfMealId
});
typeOfMealId++;
}
var day = new Day()
{
DietId = Day.DietId,
DayName = Day.Name,
DayDietMeals = dayDietMeals
};
dayDietRepository.AddDayDiet(day);
return RedirectToPage("/Diets/Edit", new { Id = Day.DietId});
}
}
Mój model:
public class DayModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Pole nazwa dnia jest wymagane")]
[DisplayName("Nazwa dnia")]
public string Name { get; set; }
public int DietId { get; set; }
[Required(ErrorMessage = "Wybierz posiłek na I śniadanie")]
public List<Meal> Breakfast { get; set; }
[Required(ErrorMessage = "Wybierz posiłek na II śniadanie")]
public List<Meal> Brunch { get; set; }
[Required(ErrorMessage = "Wybierz posiłek na obiad")]
public List<Meal> Lunch { get; set; }
[Required(ErrorMessage = "Wybierz posiłek na podwieczorek")]
public List<Meal> Tea { get; set; }
[Required(ErrorMessage = "Wybierz posiłek na kolację")]
public List<Meal> Dinner { get; set; }
public int[] ids { get; set; }
}