Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
Karta
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
1

Как отобразить 2 модели в одном представлении

10.03.2013, 23:59. Просмотров 4596. Ответов 13
Метки нет (Все метки)

Добрый день.
У меня вопрос...
Я сделала 2 модели данных, соответственно 2 таблички в БД, 2 контроллера.
А как мне в одном представлении отобразить обе ммодели данных??
Например: Для модели: модель1 я создаю сонтролер, создается представление ...
Как мне на странице index.cs в паприке модель1 отобразить таблицу и модель1 и модель2 ??

Спасибо
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2013, 23:59
Ответы с готовыми решениями:

Как реализовать отображение 3х таблиц бд в одном представлении
Есть 3 таблицы базы данных: Products, Category и Bonus. Их описываю 3 модели соответственно ...

Как отобразить свойство элемента модели по нажатии на ссылку?
Здравствуйте. Есть view куда отправляется модель, которая представляет собой список элементов. ...

Несколько моделей в одном представлении
Здравствуйте! Только начал разбираться в ASP.NET MVC. Нужно сделать страницу, на которой будет...

Данные из разных таблиц в одном представлении
Здравствуйте. Есть 4 модели: public class User { public int...

Несколько моделей в одном представлении: возможно ли
Возможно ли (и правильно ли) отображать в представлении несколько моделей? Или сама MVC требует...

13
ayrat
28 / 28 / 2
Регистрация: 24.01.2013
Сообщений: 183
11.03.2013, 02:21 2
1) одна модель это не обязательно одна таблица и вообще не обязательно чтобы она была привязана к таблицам
2) модель и контролер это совершенно разные понятия и они вообще могут быть не связаны между собой и как я понял вы имели ввиду то что у вас есть два action не важно в одном они контролере или в двух разных и каждый action возвращает модель в представление то есть return view("модель(как колекция данных)");
3) И так далее

Ответ на вопрос:
1)в общем если я понял ваш вопрос то второй action сделайте как частичное представление то есть partialaction - данный способ укладывается в правильное использование технологией mvc но его жесткая привязка к представлению то есть почти все action привязаны к представлению это заставляет многих спорить оптимальное ли это решение или нет- личноя по этому поводу спорить не хочу
2) второй способ исходит из величия языка разор то есть то что он позваляет напрямую обращаться к той или иной колекии и даже к таблице минуя контролеры и действия (хотя не правильно выразился в данном случаи контролер и действие существовать должны но только как путь к представлению и то что представление будет возвращаться клиенту - но данный способ использования mvc не является правильным использованием использования данной технологией но не является и ошибкой. то есть для вашего примера можно в одном представлении о у которого есть свой контролер и действие, посредством сишарп обратиться к таблицам на прямую (то есть из представления) - эта штуку можно использовать только для get зпросов хотя это очевидно. этот способ не рекомендую использовать на данный момент вашего обучения
0
Karta
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
13.03.2013, 02:53  [ТС] 3
Доброго времени суток...
Помогите решить проблему...
Я создала две модели:

C#
1
2
3
4
5
6
7
8
9
public class Address
    {
     
        public string City { get; set; }
        public string Code { get; set; }
        public int Id { get; set; }
        
    }
}

C#
1
2
3
4
5
6
7
8
9
 public class Company
    {
        public int Id { get; set; }
        public string CompanyEmailAddress { get; set; }
        public string DirectorName { get; set; }
        public int Id { get; set; }
        public string Name { get; set; }
       
   }
а так же сделала еще одну модель modelView:

C#
1
2
3
4
5
6
7
8
9
10
11
public class nameViewModel
    {
        public Company Company { get; set; }
        public Address  Address { get; set; }
       
    }
    public class ExampleDBContext : DbContext
    {
        public DbSet<Company> Companys { get; set; }
        public DbSet<Address> Addresss { get; set; }
    }
Далее к последней модели сделала контроллер:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Default1Controller : Controller
    {
        private ExampleDBContext db = new ExampleDBContext();
        //
        // GET: /Default1/
 
        public ActionResult Index()
        {
            var nameViewModel = new nameViewModel();
         nameViewModel.Address = new Address();
         nameViewModel.Company = new Company();
        return View(nameViewModel);
        }
public ActionResult Edit(int id )
        {
            var nameViewModel = new nameViewModel();
            nameViewModel.Address = db.Addresss.Find(id);
            nameViewModel.Company = db.Companys.Find(id);
            
            return View(nameViewModel);
        }
 
        //
        // POST: /Default1/Edit/5
 
        [HttpPost]
        public ActionResult Edit(nameViewModel nameViewModel)
        {
            if (ModelState.IsValid)
            {
                //save your items here
 
                db.SaveChanges();
 
                return RedirectToAction("Index");
            }
           
            return View(nameViewModel);
        }
Но я столкнулась с двумя проблемами...
1. Когда я вызываю edit у меня выдает ошибку, может я неправильно описала редактирование??
2.Когда я создаю представление:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@model MvcExample.Models.nameViewModel
 
 
@{
    ViewBag.Title = "Index";
}
<p>
    @Html.LabelFor(model => model.Company.Name)
 
 @Html.EditorFor(model => model.Company.Name)
 @Html.ValidationMessageFor(model => model.Company.Name)
  </p>
<p>
      @Html.LabelFor(model => model.Address.City)
 
 @Html.EditorFor(model => model.Address.City)
 @Html.ValidationMessageFor(model => model.Address.City)
 
</p>
<div>
@foreach (var item in Model.Address) {
        <p>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) 
           
        </p>
     }  
    </div>
    <div>
@foreach (var item in Model.Company) {
        <p>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) 
           
        </p>
     }  
        </div>
выдает ошубку при написании цикла

HTML5
1
2
3
4
5
6
@foreach (var item in Model.Company) {
        <p>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) 
           
        </p>
     }
В чем здесь может быть проблема? Как исправить?
Спасибо
0
obrazer
71 / 71 / 3
Регистрация: 04.09.2012
Сообщений: 170
13.03.2013, 11:15 4
А какие ошибки выдает?

И могу предположить, что Model.Company (да и Model.Address) являются одиночными объектами и не реализуют IEnumerable, что не позволяет им перебираться в цикле.
0
Karta
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
13.03.2013, 11:47  [ТС] 5
По поводу представления index программа мне пишет, что мол нету Вас IEnumerablе... Вы были правы
Ну допустим я опишу 2 сущности в одной, например:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Address
    {
     
        public string City { get; set; }
        public string Code { get; set; }
        public int Id { get; set; }
        
    }
public class Company
    {
        public int Id { get; set; }
        public string CompanyEmailAddress { get; set; }
        public string DirectorName { get; set; }
        public int Id { get; set; }
        public string Name { get; set; }
       
   }
}
А как мне бы описать IEnumerablе? Это в той же модели или в модели nameViewModel ?
0
ayrat
28 / 28 / 2
Регистрация: 24.01.2013
Сообщений: 183
13.03.2013, 17:40 6
Karta,
ты реально походу немного недопонимаешь что ты делаешь.

смотри твой ActionResult Edit(int id ) - возвращает класс nameViewModel
но то что ты хочешь сделать, хотя честно признаюсь в код не вчитывался должно возвращать IEnumerable<nameViewModel> - то есть список элементов

В общем просто представь на данный момент, что nameViewModel - это строка то есть больше одной строки здесь быть не может. а IEnumerable<nameViewModel> - это список строк nameViewModel. А так как ты возвращаешь только строку то ты ее можешь принимать только как строку, если же ты возвращаешь список строк то тогда ты можешь воспользоваться циклом
0
obrazer
71 / 71 / 3
Регистрация: 04.09.2012
Сообщений: 170
13.03.2013, 20:57 7
Цитата Сообщение от Karta Посмотреть сообщение
А как мне бы описать IEnumerablе?
Перед тем как задаваться вопросом "как", необходимо ответить на вопрос "зачем".

Могу предположить, что неправильная модель. Но не зная "зачем", сложно давать советы.
Цитата Сообщение от Karta Посмотреть сообщение
Ну допустим я опишу 2 сущности в одной, например:
Это описание двух классов. Могу предположить, что описания ОДНОГО адреса и ОДНОЙ компании. А в представлении попытка вывести СПИСОК Адресов и СПИСОК Компаний.

Если действительно надо выводить список, то Модель для представления должна содержать списки (Например List<>), а если надо выводить просто ОДИН адрес и данные по ОДНОЙ компании, то в представлении не нужны циклы.

ps: Не знаю зачем вы взялись за программирование, но понимания принципов построения программ явно нет, а без них все эти обсуждения бесполезны.
0
ayrat
28 / 28 / 2
Регистрация: 24.01.2013
Сообщений: 183
14.03.2013, 01:50 8
Цитата Сообщение от obrazer Посмотреть сообщение
Не знаю зачем вы взялись за программирование, но понимания принципов построения программ явно нет, а без них все эти обсуждения бесполезны.
- с последнем согласен с Вами
- а с началом нет, НАУЧИТСЯ ЕЩЁ, ещё лучше тебя будет на клавиатуре пиликать ...
0
obrazer
71 / 71 / 3
Регистрация: 04.09.2012
Сообщений: 170
14.03.2013, 10:36 9
Цитата Сообщение от ayrat Посмотреть сообщение
- с последнем согласен... - а с началом нет
Эта фраза не делится.
Зачем браться программировать, если нет понимания азов и не поставлена конечная цель, и не определены цели и задачи конкретного решения?
Без всего этого это не программирование, а мучение в первую очередь себя.

Вот сперва надо научиться (хотя бы азам), а там не далеко и до "лучше тебя" путем пробок и ошибок.
0
Karta
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
14.03.2013, 11:42  [ТС] 10
Все спасибо за критику, проблему решила.
0
ayrat
28 / 28 / 2
Регистрация: 24.01.2013
Сообщений: 183
14.03.2013, 17:24 11
obrazer, может он таким образом и учится. Цель поставлена вроде создать какой то там сайт он открывает книжки и обучалки и начинает пытаться разобраться. да может кое что не получается да может языка программирования не знает, но это совершенно не значит что он не научится.

Не все же становятся программистами потому что хотят стать программистами.
У некоторых просто есть цель создать что либо но для этого нужно программирование, вот они и начинают изучать начиная сверху. То есть сначала вникают на чем это им лучше писать, хопа веб программирование давай ка возьмусь асп нет мвс. Начинает разбираться кто же знал что для этого надо знать язык с#, так и начинается поск лучшего решения.

Но соглашусь когда начинаешь с самих азов это куда правильнее. Но при этом если у человека не стояло первоначальное желание стать программистом изучение снизу может стать в тягость и отбить желание вообще программировать со словами "к сабачим чертям зачем мне вообще знать что такое рекурсивная функция или создавать кружочки которые будут двигаться в форме и отбиваться друг от друга если встретят на своем пути или границу формы или себе подобных"
0
obrazer
71 / 71 / 3
Регистрация: 04.09.2012
Сообщений: 170
14.03.2013, 17:35 12
Цитата Сообщение от ayrat Посмотреть сообщение
obrazer, может он таким образом и учится. Цель поставлена вроде создать какой то там сайт он открывает книжки и обучалки и начинает пытаться разобраться. да может кое что не получается да может языка программирования не знает, но это совершенно не значит что он не научится.
Предполагаю, что все таки "она"

Но я имел ввиду то, что должна быть цель. Например отобразить список адресов. И сперва искать для этого решения, а не сразу пытаться программировать. Например, разобраться каким образом хранятся списки, какими классами описываются, какие методы и способы есть для работы со списками и т.п. А потом уже начинать писать код.

От данного пользователя это, если мне не изменяет память, уже вторая тема в которой путаются одиночные объекты и списки и происходит попытка катить квадратное и тащить круглое. Из чего я сделал вывод, что вникание в ситуацию не происходит и попытки понять "ху из ху" нет. А имеется просто упорное стучание головой в стену. Не спорю - таким образом тоже можно попасть в соседнее помещение, только неизвестно, что крепче окажется - голова или стена.
0
ayrat
28 / 28 / 2
Регистрация: 24.01.2013
Сообщений: 183
14.03.2013, 17:51 13
obrazer, ну в общем вы правы, но согласитесь что если не знаешь то знающему человеку любой твой вопрос может показаться глупым. а когда сам узнаешь ответы на вопросы будешь считать глупыми тех людей которые задают такого рода вопросы. Ведь каждому из нас это свойственно ведь все мы задавали дуратские вопросы.

Вот у меня например тоже есть глупый вопрос касаемый action filter:
"При обращение пользователя к к GET Aсtion то есть к действию которая возвращает страницу, если поставить на это действие фильтр, то будет ли он получать полученные от пользователя куки в OnActionExecuting, то есть до того как будет выполнено действие, мне что-то подсказывает что будет, хотя хотелось бы знать на верняка, но если конечно к этому моменту я сам не проверю это"
0
gggg
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 2
06.11.2014, 21:12 14
ayrat, привет, как с вами связаться?
0
06.11.2014, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2014, 21:12

Добавление нескольких разных объектов в одном представлении
Добрый день, интересует следующее: Есть сущность &quot;Объявление&quot; которое содержит идентификатор...

Конфликты как отобразить поля в представлении
Есть конфликтные документы для них сделано специальное представление (где отображаются только...

Как при загрузке формы отобразить данные из БД в табличном представлении
почему когда я запускаю программу на форме отображается таблица,но данных занесенных в нее раннее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru