Как отобразить данные из нескольких таблиц в одном представлении MVC
Мне трудно решить следующее С помощью представления MVC.
моя цель-отображать данные из нескольких таблиц в одном представлении MVC. Основная часть данных поступает из таблицы Retailers. У меня также есть другая таблица RetailerCategories, в которой хранится retailerid из таблицы Retailers, а также categoryid, связанный с таблицей категорий.
обратите внимание, что существует несколько записей для каждого retailerid в RetailerCategories таблица.
в представлении я хочу показать список розничных торговцев и с каждым розничным торговцем я хочу показать список категорий, применимых к ним.
каков был бы лучший способ сделать это? Некоторые из вещей, которые я пробовал покрыты можете ли вы помочь с этой проблемой MVC ViewModel?
Это, однако, не представляется правильным подходом.
3 ответов
вам нужна модель представления, специально адаптированная к потребностям этого представления. При определении моделей представления вы не должны думать в терминах таблиц. Таблицы SQL не имеют абсолютно никакого значения в представлении. Подумайте о том, какую информацию вам нужно показать и определить свои модели представления соответственно. Тогда вы могли бы использовать AutoMapper для преобразования между вашими реальными моделями и моделью представления, которую вы определили.
поэтому забудьте обо всем, что вы сказали о таблицах и сосредоточьтесь на следующее предложение:
в представлении я хочу показать список розничные торговцы и с каждым розничным торговцем I хотите показать список категорий применимо к ним.
это предложение на самом деле очень хорошо, поскольку оно точно объясняет, что вам нужно. Так что, как только вы знаете, что вам нужно идти вперед и моделировать его:
public class CategoryViewModel
{
public string Name { get; set; }
}
public class RetailerViewModel
{
public IEnumerable<CategoryViewModel> Categories { get; set; }
}
теперь вы сильно набираете свой вид на IEnumerable<RetailerViewModel>
. Отсюда легко сделать то, что вы хотите в вид:
отображение списка розничных торговцев с каждой розничной торговлей, имеющей список связанных категорий.
Это просто, Просто делай, что я говорю, шаг за шагом.
добавить строку подключения в
-
выберите модели из Обозревателя решений и добавьте 4 класса следующим образом
-
1-й класс для первой таблицы " у меня есть таблица employ, которая имеет 3 столбца
общественный класс использует { [Ключевой] public int Emp_id { get; set; } открытая строка Emp_name { get; set; } публичная строка Emp_city { get; набор; } }
-
2-й класс для моей таблицы темпа
темп общественного класса { [Ключевой] public int ID { get; set; } public int Emp_Id { get; set; } тема публичной строки { get; set; } public string hobby { get; set; } }
теперь я создаю третий класс в папке модели, которые содержат значение, которое я хочу от employ table и tempo table
public class Alladd { public int ID { get; set; } public int Emp_Id { get; set; } public string subject { get; set; } public string hobby { get; set; } public string Emp_name { get; set; } public string Emp_city { get; set; } }
и последний класс-datacontext класс!--5-->
public class DataContext:DbContext { public DataContext() : base("DefaultConn")//connection string { } public DbSet<Employ> Empdata { get; set; } public DbSet<tempo> Tempdata { get; set; } }
-
-
Теперь перейдите к домашнему контроллеру и добавьте код, как показано ниже
public ActionResult file() { // IList<tempo> tempi=new List<tempo>(); IEnumerable<Alladd> model = null; // model = getVerifydetails(id); // return View(objcpModel); List<Alladd> verify = new List<Alladd>(); cn.Open(); if (cn.State == ConnectionState.Open) { string query = "select Employ.Emp_name,Employ.Emp_id,Employ.Emp_city,tempo.hobby,tempo.id,tempo.subject from Employ inner join tempo on Employ.Emp_id=tempo.Emp_id;";//joining two table SqlCommand cmd=new SqlCommand(query,cn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { verify.Add(new Alladd { Emp_name = dr[0].ToString(), Emp_Id= Convert.ToInt32(dr[1].ToString()), Emp_city = dr[2].ToString(), hobby = dr[3].ToString(),ID = Convert.ToInt32(dr[1].ToString()),subject= dr[4].ToString()});//filling values into Alladd class } cn.Close(); } return View(verify); }
-
теперь последний шаг так просто
- перейдите в Обозреватель решений
- выберите папку views и щелкните по ней левой кнопкой мыши и выберите add view
- теперь назовите его как "файл", который мы даем его в контроллер
- проверьте на create strongly type view
- выберите класс модели из раскрывающегося списка - > Alladd
- выберите шаблон scaffold - > список
- нажмите кнопку Add
теперь вы закончили
удачи в кодировании...