У меня есть таблицы Categories
и SubCategories
в SQL Server. У обоих есть столбцы Id
и Name
.
На странице просмотра отображается список подкатегорий, которые находятся в одной из категорий.
В верхней части страницы я хочу показать идентификатор и название категории, на которую они нажали.
Идентификатор уже настроен в верхней части страницы, так как он также находится в контроллере (хотя я не знаю, где)
@{
List<SubCategory1> subCategories1 = (List<SubCategory1>)ViewBag.subCategories;
int id = (int)ViewBag.id;
}
Так что я уже могу отобразить его на странице, набрав <p>@id</p>
.
Но где мне нужно добавить это в контроллер, объект или страницу, чтобы также отображать имя категории на основе идентификатора категории
Я устал добавлять его в сущность, а также добавлять базу данных категорий так же, как и подкатегории, но я до сих пор не знаю, как добавить имя категории так же, как идентификатор
public virtual Category CategoryName { get; set; }
List<Category> categoryList = (List<Category>)ViewBag.categoryName;
Я просмотрел похожие сообщения, но они хотят показывать идентификатор и имя в списке, а не так, как настроен мой идентификатор.
Принятый ответ говорит: «Вы можете внедрить свой dbcontext в свое представление»
Вы используете MVC (модель — представление — контроллер), не размещайте никаких вызовов базы данных внутри представления — это должно быть сделано на других уровнях.
В вашей ситуации просто напечатайте свое представление с помощью @model YourNamespace.CategoryViewModel
Затем определите CategoryViewModel
в классе модели в соответствии с вашими потребностями, возможно:
public class CategoryViewModel
{
public string Name { get; set; }
//SubCategory is another model class with required properties
public IList<SubCategory> subcategories { get; set; }
// Other properties required by your view
}
Ваш контроллер будет выглядеть примерно так
public ActionResult Index(int id)
{
// Call your service class which encapsulate the logic
var model = yourServiceClass.PopulateModel(id);
// return the View with your model
return View("path-to-your-view", model)
}
Наконец, в своем классе обслуживания заполните свою модель
public List<CategoryViewModel> PopulateModel(id)
{
// Populate your model via a database call using _context.yourmethod()
}
Теперь ваше представление строго типизировано с помощью CategoryViewModel
, которое имеет название категории и список подкатегорий со своими собственными свойствами; теперь вы можете отображать их в представлении так, как хотите.
Лучшим способом было бы получить промежуточный слой, например, получить модель из вашей базы данных, а затем сопоставить ее с ViewModel, но давайте сначала не будем усложнять.
В целом, пожалуйста, избегайте: