Как отображать данные из нескольких таблиц в одном представлении MVC
Мне сложно решить следующее с помощью MVC-представления.
Моя цель - отображать данные из нескольких таблиц в одном представлении MVC. Основная часть данных поступает из таблицы Retailers. У меня также есть другая таблица RetailerCategories, которая хранит розничную торговлю из таблицы Retailers, а также категорию, ссылающуюся на таблицу Category.
Обратите внимание, что в таблице RetailerCategories имеется несколько записей для каждого розничного продавца.
В представлении я хочу показать список розничных торговцев и с каждым продавцом, я хочу показать список категорий, применимых к ним.
Каким будет лучший способ достичь этого? Некоторые из вещей, которые я пробовал, описаны в Можете ли вы помочь с этой проблемой MVC ViewModel?
Это, однако, не является правильным подходом.
Ответы
Ответ 1
Вам нужна модель просмотра, специально адаптированная к потребностям этого представления. При определении моделей просмотра вы не должны думать в терминах таблиц. Таблицы SQL не имеют абсолютно никакого смысла в представлении. Подумайте о том, какую информацию вам нужно показать и определить ваши модели просмотра соответственно. Затем вы можете использовать AutoMapper для преобразования между вашими реальными моделями и моделью просмотра, которую вы определили.
Так что забудьте обо всех, что вы сказали о таблицах, и сосредоточьтесь на следующем предложении:
В представлении я хочу показать список розничной торговли и с каждым розничным продавцом я хотите показать список категорий применимо к ним.
Это предложение действительно очень хорошо, так как оно точно объясняет, что вам нужно. Итак, как только вы узнаете, что вам нужно, и смоделируйте его:
public class CategoryViewModel
{
public string Name { get; set; }
}
public class RetailerViewModel
{
public IEnumerable<CategoryViewModel> Categories { get; set; }
}
Теперь вы сильно набираете ваш взгляд на IEnumerable<RetailerViewModel>
. Отсюда легко сделать то, что вы хотите в представлении:
показывающий список розничных торговцев с каждой розничной торговлей, имеющих список связанных категорий.
Ответ 2
это также может быть полезно;
видео из chris pels
Ответ 3
Просто просто делайте то, что я говорю шаг за шагом.
-
добавить строку подключения в файл web.config
-
выберите модели из браузера решений и добавьте 4 класса следующим образом
-
1-й класс для первой таблицы "У меня есть таблица, содержащая 3 столбца
открытый класс.
{ [Key] public int Emp_id {get; задавать; } public string Emp_name {get; задавать; } public string Emp_city {get; задавать; }
}
-
2-й класс для таблицы темпа
темп публичного класса
{ [Key] public int ID {get; задавать; } public int Emp_Id {get; задавать; } public string subject {get; задавать; } общедоступное хобби {get; задавать; }
}
Теперь я создаю третий класс в папке модели, который содержит значение, которое я хочу получить из таблицы использования и таблицы темпа
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
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);
}
-
теперь последний шаг настолько прост
- перейти к редактору решений
- выберите папку просмотра и щелкните левой кнопкой мыши по ней и выберите добавить представление
- теперь назовите его как "файл", который мы передаем ему в контроллер.
- проверить, создать вид с сильным типом
- выберите класс модели из раскрывающегося списка- > Alladd
- выберите scaffold templet → Список
- нажмите кнопку Добавить
Теперь вы закончили
Счастливое кодирование...