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

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

Ответ 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 → Список
    • нажмите кнопку Добавить

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

Счастливое кодирование...