Я хочу использовать DropDownListFor для редактирования ингредиентов, которые есть в моем рецепте, поэтому мне нужно сопоставить элемент ICollection с DropDownListFor - PullRequest
0 голосов
/ 07 июня 2019

Я использую EF, и мои отношения между таблицами многие-ко-многим. Я хочу отображать и редактировать свойство ICollection, чтобы не только отображать мои ингредиенты из рецепта, но также редактировать, добавлять или удалять их.

Я пытался использовать EditorFor, но изменения ингредиента не были изменены и отправлены в базу данных. Я хочу использовать DropDownList, потому что он может отображать ингредиенты, которые есть в моем рецепте, в виде списка, поэтому я могу выбирать между ними.

Это моя модель рецептов и ингредиентов с реляционной таблицей RecipesIngredients:

namespace Licenta.Models
{
    public class Recipe
    {
        [Key]
        public int IDRecipe { get; set; }
        public string Name { get; set; }
        public string Desc { get; set; }
        public string Steps { get; set; }
        public float Kcal { get; set; }
        public float Pro { get; set; }
        public float Carbo { get; set; }
        public float Fat { get; set; }
        public virtual ICollection<RecipesIngredients> RecipesIngredients { get; set; }

    }
}

namespace Licenta.Models
{
    public class RecipesIngredients
    {
        [Key]
        [Column(Order = 1)]
        public int IDRecipe { get; set; }

        [Key]
        [Column(Order = 2)]
        public int IDIngredient { get; set; }

        public virtual Recipe Recipe { get; set; }
        public virtual Ingredient Ingredient { get; set; }
    }
}

namespace Licenta.Models
{
    public class Ingredient
    {
        [Key]
        public int IDIngredient { get; set; }
        public string Nume { get; set; }
        public float Kcal { get; set; }
        public float Pro { get; set; }
        public float Carbo { get; set; }
        public float Fat { get; set; }
        public virtual ICollection<RecipesIngredients> RecipesIngredients { get; set; }
    }
}

Это мой контроллер:

public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Recipe recipe = db.Recipes.Find(id);
            if (recipe == null)
            {
                return HttpNotFound();
            }
            return View(recipe);
        }

        // POST: Recipes/Edit/5
        
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IDRecipe,Name,Kcal,Pro,Carbo,Fat,Desc,Steps,Ingredients,RecipesIngredients")] Recipe recipe)
        {
            if (ModelState.IsValid)
            {
                db.Entry(recipe).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(recipe);
        }

И просмотр страницы редактирования:

@model Licenta.Models.Recipe

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Rețetă</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.IDRecipe)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        

        
        <div class="form-group">
            @foreach (var item in Model.RecipesIngredients)
                {
                    <td>
                        @Html.DropDownListFor(model => item.Ingredient.Nume, @* this is where i want to edit the ingredients*@)
                    </td>
                }
            <div class="col-md-10">
                @Html.ValidationMessageFor(model => model.RecipesIngredients, "", new { @class = "text-danger" })
            </div>
        </div>
        

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

Это вид, который я хочу использовать для редактирования своих ингредиентов. Есть ли способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...