Moje encje:

public class Meal
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }
    [Required(ErrorMessage = "Proszę podać nazwę posiłku")]
    public string Name { get; set; }
    [Required(ErrorMessage = "Proszę podać ilość białka")]
    [Range(0.00, double.MaxValue, ErrorMessage = "Proszę podać dodatnią ilość.")]
    public double Protein { get; set; }
    [Required(ErrorMessage = "Proszę podać ilość węglowodanów")]
    [Range(0.00, double.MaxValue, ErrorMessage = "Proszę podać dodatnią ilość.")]
    public double Carbohydrates { get; set; }
    [Required(ErrorMessage = "Proszę podać ilość tłuszczy")]
    [Range(0.00, double.MaxValue, ErrorMessage = "Proszę podać dodatnią ilość.")]
    public double Fat { get; set; }
    [Required(ErrorMessage = "Proszę podać ilość kalorii")]
    [Range(0.00, double.MaxValue, ErrorMessage = "Proszę podać dodatnią ilość.")]
    public double Calories { get; set; }
}
 
 
public class EatenMeal
{
    public int Id { get; set; }
    public virtual Meal Meal { get; set; }
    public virtual MealType MealType { get; set; }
    public double Serving { get; set; }
    public string Username { get; set; }
    public DateTime Date { get; set; }
}
public class MealType
{
    public int Id { get; set; }
    public string Name { get; set; }
}

W widoku akcji List kontrolera Meal, która wyświetla wszystkie obiektu Meal jest opcja "Dodaj", która odsyła do akcji AddEatenMeal kontrolera EatenMeal i wygląda to tak:

public ActionResult AddEatenMeal(int id)
{
    var meal = mealRepository.GetMeal(id);
    EatenMeal eatenMeal = new EatenMeal() { Meal = meal, Username = User.Identity.Name };
    return View(eatenMeal);
}

[HttpPost]
public ActionResult AddEatenMeal(EatenMeal eatenMeal)
{
    if(ModelState.IsValid)
    {
        eatenMealRepository.AddEatenMeal(eatenMeal);
        RedirectToAction("Index", "Home");
    }
    return RedirectToAction("Index", "Home");
}

Pobieram z bazy danych posiłek o Id, które jest przekazywane poprzez kliknięcie wcześniej przycisku "Dodaj". Następnie tworze obiekt EatenMeal i inicjuję dwa pola tego obiektu oraz na końcu przekazuje go do widoku, w którym będzie trzeba uzupełnić resztę pól obiektu EatenMeal, a przedstawia się to następująco:

@model Domain.Entities.EatenMeal

@{
    ViewBag.Title = "Dodawanie posiłku do dziennika";
}

@using (Html.BeginForm("AddEatenMeal","EatenMeal", FormMethod.Post, new {@class = "form"}))
{
    @Html.HiddenFor(x => x.Meal.Name)
    @Html.HiddenFor(x => x.Username)
    @Html.HiddenFor(x => x.Meal.Calories)
    @Html.HiddenFor(x => x.Meal.Carbohydrates)
    @Html.HiddenFor(x => x.Meal.Fat)
    @Html.HiddenFor(x => x..Meal.Protein)
    @Html.HiddenFor(x => x.Meal.Id)
    @Html.HiddenFor(x=>x.Username)
    <div class="form-group">
        @Html.Label("Nazwa posiłku")
        @Html.Label(Model.Meal.Name, new { @class = "form-control" })
    </div>
    <div class="form-group">
        @Html.Label("Porcja (g)")
        @Html.TextBoxFor(x => x.Serving, new { @class = "form-control" })
    </div>
    <div class="form-group">
        @Html.Label("Typ posiłku")
        @Html.DropDownListFor ??
    </div>
    <div class="form-group">
        @Html.Label("Data spożycia")
        @Html.TextBoxFor(x => x.Date, new { @class = "form-control", @id="date-eaten", @Value=DateTime.Today.ToShortDateString()})
    </div>
    <input type="submit" class="btn btn-info" value="Dodaj" />
}

I teraz pytanie, takie ukrywanie tych pól czy to jest dobre rozwiązanie? Bo nie mam innego pomysłu, aby po realizacji formularza nie utracić tych danych, które zostały przekazane do tego widoku na początku.
Drugie pytanie, już próbowałem na kilka sposób i nie wychodzi zrobienie DropDownListFor dla MealType.
Próbowałem zrobić viewmodel, który zawierał pole EatenMeal i listę zawierającą obiekty MealType, ale dziwnie to działało, bo w dodanym wierszu w bazie danych pole Id_MealType miało jakieś losowe wartości.