public class Category
{
[Key]
[Display(Name = "ID")]
public int Id { get; set; }
[Display(Name = "Parent Category")]
public int? ParentId { get; set; }
[Required]
[Display(Name = "Category Name")]
public string Name { get; set; }
[Required]
[Range(0, int.MaxValue)]
[Display(Name = "Display Order")]
public int DisplayOrder { get; set; }
[Required]
[Display(Name = "Active")]
public bool IsActive { get; set; }
[Display(Name = "Created At")]
public DateTime CreatedAt { get; set; }
[Display(Name = "Updated At")]
public DateTime UpdatedAt { get; set; }
[ForeignKey("ParentId")]
public virtual Category Parent { get; set; }
}
Вот моя категория модал.Я хочу, чтобы этот модал был вложен в тег выбора как этот:
Автомобиль- Машины- БМВ- АудиНедвижимость- Жилой-- Продаетсяи т.д ...
Я также использовал шаблон репозитория в своем проекте.Все необходимые файлы перечислены ниже по порядку.
Интерфейсы:
public interface IRepository<T> where T : class
{
IEnumerable<T> List();
T Find(int? id);
T Find(Func<T, bool> predicate);
void Create(T entity);
void Update(T entity);
void Delete(T entity);
int Count(Func<T, bool> predicate);
void Add(T entity);
void Save();
}
public interface ICategoryRepository : IRepository<Category>
{
IEnumerable<Category> ListParentCategories();
}
В связанном виде:
@model GoldenStore.Models.ViewModels.CategoryViewModel
@using GoldenStore.Extensions
<select asp-for="Category.ParentId" asp-items="Model.Categories.ToSeceltListItem(Model.Category.Id)" class="input-select">
<option value="">Main Category</option>
</select>
В папке расширений:
public static class ReflectionExtension
{
public static string GetPropertyValue<T>(this T item, string propertyName)
{
return item.GetType().GetProperty(propertyName).GetValue(item, null).ToString();
}
}
public static class IEnumerableExtension
{
public static IEnumerable<SelectListItem> ToSeceltListItem<T>(this IEnumerable<T> items, int selectedValue)
{
return from item in items
select new SelectListItem
{
Text = item.GetPropertyValue("Name"),
Value = item.GetPropertyValue("Id"),
Selected = item.GetPropertyValue("Id").Equals(selectedValue.ToString())
};
}
}
CategoryViewModel:
public class CategoryViewModel
{
public Category Category { get; set; }
public IEnumerable<Category> Categories { get; set; }
}
Поэтому, что я должен сделать для такой вложенной категории:
Автомобиль- Машины- БМВ- АудиНедвижимость- Жилой-- Продаетсяи т.д ...