Как отобразить данные из нескольких таблиц в одном представлении 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>. Отсюда легко сделать то, что вы хотите в вид:

отображение списка розничных торговцев с каждой розничной торговлей, имеющей список связанных категорий.


Это также может быть полезно;

видео от Криса пеловит


Это просто, Просто делай, что я говорю, шаг за шагом.

  1. добавить строку подключения в

  2. выберите модели из Обозревателя решений и добавьте 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; }
    }
    
  3. Теперь перейдите к домашнему контроллеру и добавьте код, как показано ниже

    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);
    }
    
  4. теперь последний шаг так просто

    1. перейдите в Обозреватель решений
    2. выберите папку views и щелкните по ней левой кнопкой мыши и выберите add view
    3. теперь назовите его как "файл", который мы даем его в контроллер
    4. проверьте на create strongly type view
    5. выберите класс модели из раскрывающегося списка - > Alladd
    6. выберите шаблон scaffold - > список
    7. нажмите кнопку Add

теперь вы закончили

удачи в кодировании...