Как отобразить данные из нескольких таблиц в одном представлении MVC - PullRequest
10 голосов
/ 01 декабря 2010

Мне трудно решить следующее с помощью MVC.

Моя цель - отобразить данные из нескольких таблиц в одном представлении MVC. Большая часть данных поступает из таблицы под названием Retailers. У меня также есть другая таблица под названием RetailerCategories, в которой хранится retailerid из таблицы Retailers, а также ссылка на categoryid для таблицы Category.

Обратите внимание, что в таблице RetailerCategories есть несколько записей для каждого ретейлера.

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

Как лучше всего это сделать? Некоторые вещи, которые я попробовал, описаны в Можете ли вы помочь с этой проблемой MVC ViewModel?

Однако это не совсем правильный подход.

Ответы [ 3 ]

12 голосов
/ 01 декабря 2010

Вам нужна модель вида, специально адаптированная к потребностям этого вида. При определении моделей представлений вы не должны думать с точки зрения таблиц. Таблицы SQL не имеют абсолютно никакого значения в представлении. Подумайте о том, какую информацию вам нужно показать, и определите модели представлений соответствующим образом. Тогда вы можете использовать AutoMapper для преобразования между вашими реальными моделями и моделью представления, которую вы определили.

Итак, забудьте обо всем, что вы сказали о таблицах, и сосредоточьтесь на следующем предложении:

В представлении я хочу показать список ритейлеры и с каждым ритейлером я хочу показать список категорий применимо к ним.

Это предложение на самом деле очень хорошо, поскольку оно объясняет именно то, что вам нужно. Поэтому, когда вы знаете, что вам нужно, продолжайте моделировать это:

public class CategoryViewModel
{
    public string Name { get; set; }
}

public class RetailerViewModel
{
    public IEnumerable<CategoryViewModel> Categories { get; set; }
}

Теперь вы строго набираете свой вид на IEnumerable<RetailerViewModel>. Отсюда легко и просто сделать то, что вы хотите в представлении:

показывает список розничных продавцов, у каждой из которых есть список связанных категорий.

1 голос
/ 01 декабря 2010

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

видео с Chris Pels

0 голосов
/ 09 января 2015

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

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

  2. выберите модели из обозревателя решений и добавьте 4 класса следующим образом

    • 1-й класс для первой таблицы "У меня есть таблица с тремя столбцами

      открытый класс Employ { [Key] public int Emp_id {get; задавать; } открытая строка Emp_name {get; задавать; } открытая строка Emp_city {get; задавать; } }

    • 2-й класс для моей таблицы темпа

      темп публичного класса { [Key] public int ID {get; задавать; } public int Emp_Id {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 class

    public class DataContext:DbContext
    {
        public DataContext() : base("DefaultConn")//connection string
        {
        }
    
        public DbSet<Employ> Empdata { get; set; }
        public DbSet<tempo> Tempdata { get; set; }
    }
    
  3. Теперь перейдите к контроллеру Home и добавьте код, как показано ниже

    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. выберите папку представлений, щелкните левой кнопкой мыши на ней и выберите добавить представление
    3. теперь назовите его как "файл", который мы передаем в контроллер
    4. проверка на создание строго типового представления
    5. выберите класс модели из выпадающего списка-> Alladd
    6. выберите шаблон scaffold -> List
    7. нажмите кнопку Добавить

Теперь все готово

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...