[英]Create Dropdown list from parents from same model
我在 MVC model 和实体框架中有一个类别 Model,它具有自引用关系。 每个 object 都有一个来自相同 model 的父级。 我想将它用于类别。 例如:
id | Value | Parentid
--------------------------
1 | Category1 | null
2 | Category2 | 1
3 | Category3 | null
4 | Category4 | 2
5 | Category5 | 4
如何在我的视图中为 select 父 ID 创建下拉列表?
这是我的 Model Class 代码:
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);
}
}
首先获取类别,
private IEnumerable<SelectListItem> GetCategories()
{
var categories = _context.CategoryModels
.Select(c => new SelectListItem
{
Value = c.ID.ToString(),
Text = c.Value
});
return categories;
}
现在您使用selectlist
或 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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.