Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
11 / 11 / 0
Регистрация: 11.08.2010
Сообщений: 130
1

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

11.07.2011, 23:12. Показов 3643. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос написан сумбурно, объясню подробнее.
У меня есть мастер страница, у неё есть модель. Также есть страница - тело, у неё также есть своя модель. Так вот как мне передать две модели для вывода?
И вообще, вывожу так - в контроллере Index пишу View(model); - model кому относится будет? Телу Index? Тогда как передать модель для мастер страницы Index?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2011, 23:12
Ответы с готовыми решениями:

Не могу выбрать между двумя моделями
http://www.allosalon.ru/product/2385 http://www.regard.ru/catalog/tovar170242.htm вроде как...

Выбор между двумя моделями плат
Какая материнка из 2 лучше и чем? (цена отличается на 100 рублей) 1)Gigabyte GA-PH67-DS3-B3 ...

Выбор между двумя моделями GTX 1660 Ti
Добрый день! При сборке компьютера по видеокарте остановился на GTX 1660 ti, но... В...

Ребят, посоветуйте выбрать между двумя моделями
И так рассматриваю к покупке Lenovo Yoga 710 14" У них есть две комплектации: 1)Lenovo IdeaPad...

10
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
11.07.2011, 23:40 2
developer_, пихаете обе модели в ViewBag, преобразуете в отображении к нужному типу - и будет вам счастье. Ну или - пишете ViewModel у которого будет 2 проперти - первая и вторая модель, передаете этот ViewModel в отображение через View(model), достаете в отображении - и профит. Второй прием описан у Сандерсона, в MVC/MVC2, первый - только для MVC3
0
11 / 11 / 0
Регистрация: 11.08.2010
Сообщений: 130
12.07.2011, 00:09  [ТС] 3
Во втором способе вы предлагаете сделать третью модель содержащую в виде объектов первые две? Если да то такой способ очевиден. Более того напрашивается вообще сделать одну модель. Но мне кажется такой способ не слишком правильным - на пустом месте создаём ещё одну модель.
Способ с ViewBag интересен, но не прозрачен в кодирование, потенциальное место для ошибок.
Это всё моё ИМХО.
Вопрос задавал, потому что тема весьма актуальна - любой (ну или почти любой ) проект состоит из мастер страницы и кучи частей страниц, и у каждой будет соя модель. Поэтому должен быть простой способ сделать эту операцию просто, быстро. По крайней мере если такого способа нет, то он должен появится.
P.S. Может я не правильно вижу технологию, делаю не так, от сюда и проблемы?
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
12.07.2011, 00:44 4
Цитата Сообщение от developer_ Посмотреть сообщение
Но мне кажется такой способ не слишком правильным - на пустом месте создаём ещё одну модель.
Это не явная модель - она не походит из предметной области и не влияет на нее, это МодельВида, ViewModel, если вы считаете такое неправильным - плюньте в лицо разработчикам Silverlight и WPF, которые используют MVVM.

Добавлено через 58 секунд
И кстати ViewModel принято создавать в иерархии веб-приложения, а не библиотеки модели - чистота нарушена не будет
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
12.07.2011, 19:50 5
Цитата Сообщение от developer_ Посмотреть сообщение
Способ с ViewBag интересен, но не прозрачен в кодирование, потенциальное место для ошибок.
использую ViewBag и радуюсь жизни, что если не секрет там такого для вас "потенциально для ошибок."?
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
12.07.2011, 23:00 6
Цитата Сообщение от nvovka Посмотреть сообщение
что если не секрет там такого для вас "потенциально для ошибок."?
возможно то что он dynamic и IntelliSence не поможет при разработке, как и тулзы рефакторинга.
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
12.07.2011, 23:07 7
несовсем понял можно попроще? Я так понял пугает вывод из ViewBag в самом View?
0
11 / 11 / 0
Регистрация: 11.08.2010
Сообщений: 130
12.07.2011, 23:10  [ТС] 8
Что то я совсем запутался.
Есть _Layout.cshtml - это мастер страница она типизированна. Содержит поле ввода.
Есть въюха Index.cshtml. Тоже типизированна.
Есть контроллер public ActionResult Index(_LayoutModel model)
Вопрос - какую модель получит контроллер? Ведь их две?
В контроллере пишим View(model);
Вопрос: кто получит модель? Мастер страница? Или въюха индекс?
Можете привести примеры кода как вы разруливаете подобную ситуацию?
Кто скажит что мастер страница не должна иметь модели, хорошу, тогда возмём две и более типизированные partial - получаем тоже самое.
Вот мастер пэйдж:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@model WhoISmulti.Models._LayoutModel
 
<!DOCTYPE html>
 
<html>
<head runat="server">
    <title>Hello word</title>
</head>
<body>
 @using (Html.BeginForm()) 
 {
     @Html.TextBoxFor(m => m.input_data)
     <input type="submit" id="button_check" value="Check"/>
 }
 @RenderBody()
</body>
</html>
Вот контроллер:
C#
1
2
3
4
public ActionResult Index(_LayoutModel model)
{
    View(model);
}
Вот въюха:

HTML5
1
2
3
4
5
@model WhoISmulti.Models.IndexModel
           
<div id="error_result">
    @Html.LabelFor(m => m.error)
</div>
модели:
C#
1
2
3
4
5
6
7
8
9
10
//********************************
    public class _LayoutModel
    {
        public string input_data { get; set; }
    }
    //********************************
    public class IndexModel
    {
        public string error { get; set; }
    }

Вопросы: Что будет возвращать такая въюха? Ведь модели 2.
Как передать 2 модели в Index. Если можно с примерами кода, а то вообще каша в голове.

Добавлено через 2 минуты
Про потенциальное место ошибок я имел ввиду упаковку в нетипизированный объект нескольких типизированных, а потом обратный парсинг на другой стороне. Ведь можно ошибится и распарсить во что угодно, и ругаться не будет.
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
12.07.2011, 23:23 9
Что ты хочеш сделать я вообще ничего непойму, зачем тебе в _Loyout передавать модель, потом у формы
C#
1
2
3
4
5
@using (Html.BeginForm()) 
 {
     @Html.TextBoxFor(m => m.input_data)
     <input type="submit" id="button_check" value="Check"/>
 }
Должен быть куда перенапрявлять и чкаким способом . т.е. Index, Home или какой там у тебя.
И вот тут @Html.TextBoxFor(m => m.input_data) ты я так понимаю хочеш передать input_data и его же должен ловить в контроллере public ActionResult Index(string input_data) Хотя я могу ошибатся пусть может кто исправит )))
0
11 / 11 / 0
Регистрация: 11.08.2010
Сообщений: 130
12.07.2011, 23:49  [ТС] 10
Опишу логику. На странице есть поле ввода и кнопка ok. Вводим инфу в поле ввода, нажимаем кнопку - возвращается ответ который выводится ниже.
Я сделал так. Т.к. поле ввода и кнопка будут на всех страницах - то сделал этот код мастер страницей. Сам вывод сделал отдельными страницами.

Должно работать примерно так. Делаем запрос в корень - это будет контроллер Index. В этом контроллере я должен получить данные из поля ввода которое находится на мастер странице.
Делаю следующей конструкцией Index(_LayoutModel model), т.е. model по идеи должен содержать model мастер страницы. Так ли это?
Далее я вызываю въюху indexView. которая должна отобразить данные. Как мне ей передать эти данные? Въюха типизированная и просит модель. В контроллере я пишу View(model); Кому будет передоватся эта модель? Мастер странице или въюхе?
И далее самое интересное, мне надо что бы страница которая возвращалась пользователю, а она как уже известно будет состоять из мастер страницы с полем ввода и страницы с ответом, так вот в поле ввода должно отображаться введёный параметр - т.е. мы должны передать модель мастер страницы обратно. Блин бред какой то %-\

Я просто захотел сделать по всем правилам MVC - и получилась такая ересь...

З.Ы. Изначально у меня было всё в куче, куча ViewBag и как не странно, прекрасно работало и выглядело просто.
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
12.07.2011, 23:57 11
Код
@using (Html.BeginForm("Твой обработчик(Index)", "Profile", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="text" id="Coment" name="Coment" placeholder="Coment" required=""/>
    
    <input type="submit" value="Go!"/>
}
Это вставляеш в Лаяут
public ActionResult Твой обработчик(Index)( String Coment)
{
Как с лаяута сделать что бы на все страницы незнаю.... но так тока на Index буит

 Комментарий модератора 
Используйте теги форматирования кода

 Комментарий модератора 
Запрещено умышленно использовать выражения, противоречащие правилам русского языка.
0
12.07.2011, 23:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2011, 23:57
Помогаю со студенческими работами здесь

Выбор ноутбука между двумя моделями sony vaio
у меня проблема не знаю что выбрать либо вот такой http://catalog.onliner.by/sony/sve1511n1rw/...

На Ruby on Rails 5.2 создать приложение с двумя моделями Service и ServiceHistory
Всем привет! Вот задали такое задание: На Ruby on Rails 5.2 создать приложение с двумя моделями...

Отобразить представление в GridView
Здравствуйте, только начал осваивать ASP, но задача, которая передо мной стоит, требует скорейшего...

Не работает сборное правило
Порядок указания характеристик для background ведь произвольная да? вот в этом виде код работает ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru