Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/73: Рейтинг темы: голосов - 73, средняя оценка - 4.86
LookAround
2 / 2 / 2
Регистрация: 16.07.2012
Сообщений: 35
1

Несколько моделей в одном представлении: возможно ли

25.09.2012, 14:05. Просмотров 14247. Ответов 12
Метки нет (Все метки)

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

Простейший пример:

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

Так может продолжаться и дальше, например при клике на конкретного человека в ещё более правом столбце отображаются его данные.

P.S. Все этого из-за того, что нужно как-то "WebForms >> ASP.NET MVC"...
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2012, 14:05
Ответы с готовыми решениями:

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

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

Как отобразить 2 модели в одном представлении
Добрый день. У меня вопрос... Я сделала 2 модели данных, соответственно 2 таблички в БД, 2...

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

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

12
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
25.09.2012, 15:07 2
По моему удобнее будет сделать отдельные действия(action) с частичными представлениями для каждого случая (группы/люди/что там еще) и на отдельных страницах вызывать эти действия:
HTML5
1
2
3
<div>
    @{Html.RenderAction("ShowGroups","SomeController",someparams/*если нужны*/);}
</div>
И это такие строчки добавить на общую страницу.
1
M__A__K
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 306
30.09.2012, 17:13 3
Цитата Сообщение от LookAround Посмотреть сообщение
На левой стороне страницы находится список туристических групп,
справа список людей, которые находятся в выбранной группе.
Модель - туристическая группа, в которой есть поле, представляющее собой список людей. А в view передавать коллекцию этих групп.

Цитата Сообщение от LookAround Посмотреть сообщение
Так может продолжаться и дальше, например при клике на конкретного человека в ещё более правом столбце отображаются его данные.
это можно подгружать динамически с помощью ajax и выводить используя partial view
0
ayrat_net
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
14.12.2012, 19:20 4
Хотел бы снова поднять этот вопро. Потлму что это дело меня тоже заинткресовало.

Поясню почему мне кажется подход использования нескольких разных представлеий на одной странице не очень удобно. Приведу пример я хочу использовать одну модель с собствкнной логикой на гескольких страницах но стобы для этого дизайн у них был разный. В итоге получается что помимо представления надо еще прописать новый контролер в итоге получаем дублирование если даже чась логики вынесем и из контролера все равно получим дублирукмык контродкры
0
14.12.2012, 19:20
M__A__K
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 306
14.12.2012, 23:21 5
ayrat_net, я не совсем понял суть проблемы.
Если дело в повторяющемся коде в разных контроллерах с одинаковой логикой, то что мешает сделать 1 контроллер и много View?! Конкретное View можно выбирать в одном Action или сделать много Action с вынесеной в отдельный метод логикой.
0
apande
17 / 17 / 2
Регистрация: 19.09.2012
Сообщений: 92
15.12.2012, 09:17 6
LookAround, да можно сделать такое но с помощью
HTML5
1
@Html.Action();
Один будет вставлять список туристических групп
другой справа список людей)
HTML5
1
2
3
4
5
6
7
<div class="позиционируешь">
@Html.Action("ListPeople","Home");
</div>
 
<div class="позиционируешь">
@Html.Action("TuristGroups","Home");
</div>
Добавлено через 28 секунд
HTML5
1
@Html.Action("ListPeople","Home");
а каждый Action будет иметь свою модель
1
ayrat_net
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
15.12.2012, 10:05 7
apande,
А теперь представь, что, что список в людей
в представлении с туристическими фирмами должен иметь горизонтальный вид
А в представлении в другом вертикальный вид

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

Добавлено через 4 минуты
Цитата Сообщение от M__A__K Посмотреть сообщение
что мешает сделать 1 контроллер и много View?! Конкретное View можно выбирать в одном Action
Вот хочется сделать именно примерно это, но тут есть и маленькая загвоздочка
1) как это сделать
а последующие вопросы я опубликую чуть позднее

Добавлено через 25 минут
M__A__K,
Хотя я сейчас посидел подумал ваш первый способ решения очень интересен.
А второй способ мне не очень понравился, просто на эту тему я уже думал ...
1
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
15.12.2012, 10:47 8
Лучший ответ Сообщение было отмечено как решение

Решение

Так если 1 контроллер, много вьювов.
C#
1
2
3
4
5
6
7
ActionResult MyController(MyParams param)
{
     var model = new MyModel();
     /*как-то его наполняем*/
     string ViewName = GetViewForParams(param);//фция для выбора имени view'a
     return View(ViewName,model);
}
3
ayrat_net
82 / 82 / 12
Регистрация: 12.01.2011
Сообщений: 1,049
15.12.2012, 10:50 9
y-fox,
Да спасибо. то что надо.
0
lifeact
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 432
11.09.2013, 12:06 10
Цитата Сообщение от apande Посмотреть сообщение
LookAround, да можно сделать такое но с помощью
HTML5
1
@Html.Action();
Один будет вставлять список туристических групп
другой справа список людей)
HTML5
1
2
3
4
5
6
7
<div class="позиционируешь">
@Html.Action("ListPeople","Home");
</div>
 
<div class="позиционируешь">
@Html.Action("TuristGroups","Home");
</div>
Добавлено через 28 секунд
HTML5
1
@Html.Action("ListPeople","Home");
а каждый Action будет иметь свою модель

спасибо, у меня есть задача которая может и так решится, но все же хотелось узнать можно ли сделать так как я уже начал:

у меня есть одно представление и одно действия контролера (для этого представления).
так вот как вернуть одному представлению две модели?:

C#
1
2
3
4
5
6
7
       public ActionResult Index()
        {
            Company CompanyMdl = new Company();
            GetCompany(CompanyMdl);
 
            return View(db.Directory.ToList(), CompanyMdl); //вот тут хочу скормить вьюхе 2 модели. Естественно на этот синтаксис ругается. Может в коллекцию как то завернуть? Только синтаксис не знаю и как потом в вьюхе принимать
        }
0
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
11.09.2013, 13:28 11
Никак.
Варианты которые я могу предложить:
1. Одну модель кинуть во ViewBag (типа ViewBag.CompanyMdl)
2. Создать еще одну модель, типа:
C#
1
2
3
4
public class MyModel{
    public Company CompanyMdl{get;set}
    public List<Directory> Directories{get;setl;}
}
На мой взгляд - второй вариант предпочтительнее.
1
lifeact
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 432
11.09.2013, 14:49 12
Цитата Сообщение от y-fox Посмотреть сообщение
Никак.
Варианты которые я могу предложить:
1. Одну модель кинуть во ViewBag (типа ViewBag.CompanyMdl)
2. Создать еще одну модель, типа:
C#
1
2
3
4
public class MyModel{
    public Company CompanyMdl{get;set}
    public List<Directory> Directories{get;setl;}
}
На мой взгляд - второй вариант предпочтительнее.
спасибо.
правильно ли я понял во втором варианте мы создаем список моделей справочника ну и дальше в коде его инициализируем?
0
винс
42 / 42 / 11
Регистрация: 16.03.2012
Сообщений: 199
14.09.2013, 12:40 13
А что мешает создать класс MyViewModel, например, и там 2 свойства.
C#
1
2
3
4
public class MyViewModel {
     public Company Name {get;set;}
     public IList<Directory> Directories {get;set;}
}
затем в контроллере создать и присвоить все что нужно, ну и передать
C#
1
return View("Index", MyViewModel)
ну и просто принимать
HTML5
1
@model MyViewModel
зы: это как пример

Вот глюк. Показало что не решен
только зря писал
0
14.09.2013, 12:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 12:40

Несколько моделей
Вопрос такой: Как на одной странице можно использовать сразу несколько моделей, и возможно ли это...

Несколько изображений в представлении
Добрый день! в бд записываю адреса картинок, которые лежать в папке проекта. У одного товара...

Несколько моделей в одно представление
Подскажите пожалуйста, как исправить ошибку... Invalid object name 'dbo.FilialComments'. ...


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

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

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