Создать выпадающий список из родителей из той же модели - PullRequest
0 голосов
/ 20 октября 2019

У меня есть модель категории в модели MVC и Entity Framework, которая имеет отношение к собственной ссылке. Это каждый объект имеет родителя от той же модели. Я хочу использовать его для категорий. Например:

id | Value     | Parentid
--------------------------
1  | Category1 |   null
2  | Category2 |    1
3  | Category3 |   null
4  | Category4 |    2
5  | Category5 |    4  

как создать раскрывающийся список в моем представлении для выбора идентификатора родителя из него?

это мой код класса модели:

public class CategoryModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID{ get; set; }
    public int? ParentID { get; set; }
    public string Value { get; set; }

    public virtual CategoryModel Parent { get; set; }
    public virtual ICollection<CategoryModel> Children { get; set; }

}
public class CommodityPageMap : EntityTypeConfiguration<CategoryModel>
{
    public CommodityPageMap()
    {
        HasOptional(x => x.Parent)
            .WithMany(x => x.Children)
            .HasForeignKey(x => x.ParentID)
            .WillCascadeOnDelete(false);
    }
}

1 Ответ

0 голосов
/ 21 октября 2019

Сначала получите категории,

private IEnumerable<SelectListItem> GetCategories()
{
    var categories = _context.CategoryModels
                    .Select(c => new SelectListItem
                    {
                       Value = c.ID.ToString(),
                       Text = c.Value
                    });

     return categories;
 }

, теперь вы передаете категории selectlist, используя ViewBag или ViewModel

public ActionResult CreateCategory()
{
    ViewBag.Categories = GetCategories();
    return View();
}

в представлении,

  <form>
    <div>
        <label>Category Name: </label> @Html.TextBox("CategoryName", null, new { @class = "foo" })
    </div>
      @if (ViewBag.Categories != null)
      {
        <div>
           <label>Parent Category: </label>@Html.DropDownList("ParentID", new 
           SelectList(ViewBag.Categories, "Value", "Text"), "Select Parent 
           Category", new { @class = "foo" })
        </div>
     }
    <button type="submit">Save</button></from>

Если вам требуется дополнительное условие для выпадающего списка категорий, вы можете добавить их методом GetCategories().

В соответствии с вашим комментарием, вот пример CategoryController

public class CategoryController : Controller
    {
        private ApplicationDbContext _context;

        public CategoryController()
        {
            _context = new ApplicationDbContext();
        }

        [HttpGet]
        public ActionResult CreateCategory()
        {
            ViewBag.Categories = GetCategories();
            return View();
        }

        private IEnumerable<SelectListItem> GetCategories()
        {
            var categories = _context.CategoryModels
                .Select(c => new SelectListItem
                {
                    Value = c.ID.ToString(),
                    Text = c.Value
                });

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