Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
1

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

28.10.2018, 15:27. Просмотров 1137. Ответов 13

Добрый день!
Бьюсь с проблемой давно
У меня есть 3 таблицы (см Рисунок)
Как мне осуществить вывод данных в одну таблицу в соответствии со связями между таблицами?
И как в данном случае сделать выборку (запрос)?
Несколько моделей засунуть в представление

Было бы здорово привести пример кода
Заранее спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2018, 15:27
Ответы с готовыми решениями:

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

Передача двух моделей в одно представление
Всем привет! Возможно ли как-то реализовать такую конструкцию: @model MyModel1 @model MyModel2

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

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

POST несколько моделей сразу
Здравствуйте. Хочу посоветоваться, как лучше сделать. Суть такова: мне с View надо передать в...

13
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
28.10.2018, 19:37 2
БД SQL запросы поддерживает ?
https://ru.wikipedia.org/wiki/Transact-SQL
- синтаксис может немного отличаться в разных БД.

SQL
1
2
3
SELECT tab1.FirstName,tab2.Date,tab3.RankName 
FROM tab1,tab2,tab3
WHERE tab1.id=tab2.idPeople AND  tab2.idSceneRank = tab3.id
0
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
28.10.2018, 19:59  [ТС] 3
SQL запрос то понятный, вопрос в том, как организовать для этого представление? И если нужно, то простроить отдельную модель, содержащую модели этих таблиц и как производить вывод из этой общей модели в одно представление?
0
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
28.10.2018, 20:27 4
RENSER, так это на первых же страницах любого учебника по mvc , запрашиваете данные из БД и отражаете их на свою модель.

C#
1
2
3
4
5
6
class ViewModel
{
   public string FirstName {get;set;}
   public DateTime Date {get;set;}
   public string RankName {get;set;}
}

HTML5
1
2
3
4
5
6
@foreach(var viewModel in dataViewList)
{
    <span>@viewModel.FirstName</span>
    <span>@viewModel.Date</span>
    <span>@viewModel.RankName </span>
}
https://metanit.com/sharp/mvc5/4.2.php
- подробнее тут.
0
28.10.2018, 20:27
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
03.11.2018, 18:27  [ТС] 5
Было бы так просто - давно бы написал)))

Я наверное некорректные вопросы задавал.
Скажем так, как организовать наполнение этой модели в контроллере? И метод для редактирования этой модели?

P.S забыл указать отношения между таблицами. Вот добавил
Несколько моделей засунуть в представление
0
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
03.11.2018, 18:56  [ТС] 6
Метод вывода index реализовал.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public ActionResult Index()
        {
            List<PeopleCreateModelView> modelList = new List<PeopleCreateModelView>();
            for(int j=1;j<db.Rank.Count()+1;j++)
            {
                var model = new PeopleCreateModelView();
                model.rank = db.Rank.Where(i=>i.ID_People== j).Single();
                model.people = model.rank.People; //.Where(i => i.ID_rank == j).Single().People;
                model.s_ranks = model.rank.S_rank;//.Where(i => i.ID_People == model.People.ID).Single().S_rank;
                modelList.Add(model);
            }
            return View(modelList);//db.People.ToList());
        }
А это моя модель

C#
1
2
3
4
5
6
7
8
  
    public class PeopleCreateModelView
    {
        public Rank rank { get; set; }
        public People people { get; set; }
        public S_rank s_ranks { get; set; }
        public Passport passports { get; set; }
    }
Но вот как реализовать метод edit для данной модели с учетем отношений 1 ко многим (многие ко многим)? И сохранить связность?
0
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
03.11.2018, 21:29 7
RENSER,PeopleCreateModelView - это вью.модель , работа с ней начинается и заканчивается на уровне обработки данных представления , а когда речь заходит о работе с данными для БД - просто запрашиваете нужные сущности и обновляете их на основе данных вью.модели.
1
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
03.11.2018, 23:25  [ТС] 8
public ActionResult Create()
{
ViewBag.ID_rank = new SelectList(db.S_rank, "ID", "RankName");
return View();
}


[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PeopleCreateModelView PeopleCreate)
{
if (ModelState.IsValid)
{
/////////////////////////Как организовать отношение///////////////////////////////////////////
PeopleCreate.rank = new Rank();
PeopleCreate.rank.ID_People = PeopleCreate.people.ID;///////Пытаемся связать их
PeopleCreate.rank.ID_rank = PeopleCreate.s_ranks.Single().ID; //Какое то ученое звание


db.People.Add(PeopleCreate.people); //пытаюсь из кастом модели передать данные в БД
db.Rank.Add(PeopleCreate.rank);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID_rank = new SelectList(db.S_rank, "ID", "RankName");
return View(PeopleCreate);
}


Представление
HTML5
1
2
3
4
5
6
7
<div class="form-group">
            @Html.LabelFor(model => model.rank.ID_rank, "ID_rank", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("ID_rank", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.rank.ID_rank, "", new { @class = "text-danger" })
            </div>
        </div>
В итогде только данные c PeopleCreate.people добавляются в таблицу. Вот такая ошибка. Правильно ли я получаю данные для своей модели в методе create?
0
Миниатюры
Несколько моделей засунуть в представление  
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
04.11.2018, 00:11 9
Цитата Сообщение от RENSER Посмотреть сообщение
PeopleCreate.s_ranks.Single().ID; //Какое то ученое звание
тут Вы запрос к БД не сделаете , у вью.модели поля с контекстом БД никак не связаны уже. , что бы не путаться - заведите у нее поля простых типов (кроме ID_rank вам тут ничего и не нужно) , которые никак не связаны с DAL.
0
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
08.11.2018, 12:17  [ТС] 10
Я все-таки не совсем понимаю. Как мне в данном случае получить нужное значение из DropDownList?
0
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
08.11.2018, 12:25 11
Цитата Сообщение от RENSER Посмотреть сообщение
Я все-таки не совсем понимаю. Как мне в данном случае получить нужное значение из DropDownList?
Так у Вас вообще значения в DropDownList есть ? - не вижу , что бы в хелпер коллекция передавалась.

П.С тут уже три вопроса нарисовалось - как обьединить модели во вью . как сохранить данные в БД и как заполнить данными элементы формы - думаю , нужно на каждый вопрос отдельную тему создать.
0
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
08.11.2018, 12:26  [ТС] 12
Да, но в таком виде
C#
1
ViewBag.ID_rank = new SelectList(db.S_rank, "ID", "RankName");
0
sau
2103 / 1680 / 288
Регистрация: 22.07.2011
Сообщений: 6,414
Завершенные тесты: 1
08.11.2018, 17:01 13
Лучший ответ Сообщение было отмечено RENSER как решение

Решение

Цитата Сообщение от RENSER Посмотреть сообщение
Да, но в таком виде
C#Выделить код
1
ViewBag.ID_rank = new SelectList(db.S_rank, "ID", "RankName");
хорошо , а где в вашем представлении используется данное значение ? , DropDownList хелпер в качестве аргумента ничего не получает.
1
RENSER
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 17
09.11.2018, 23:10  [ТС] 14
Решил вопрос

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
public class PeopleCreateModelView//модель для создания записи
    {
        public int PeopleId { get; set; }
        public int S_rankId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        
        public IEnumerable<S_rank> s_ranks { get; set; }
    }
 
 
 
        public ActionResult Create(PeopleCreateModelView PeopleCreate)
        {
            if (ModelState.IsValid)
            {
                People p = new People();
                p.FirstName =  PeopleCreate.FirstName;
                p.LastName =  PeopleCreate.LastName;
                
                db.People.Add(p);
                Rank r = new Rank();
                r.ID_People =  PeopleCreate.PeopleId;
                r.ID_rank = PeopleCreate.S_rankId;
                db.Rank.Add(r);
                db.SaveChanges();
                return RedirectToAction("Index");
                
            }
            PeopleCreate.s_ranks = db.S_rank.ToList();
            
            ViewBag.ID_rank = new SelectList(db.S_rank, "ID", "RankName");//db.S_rank - таблица с учеными званиями
            return View(PeopleCreate);
        }
вот так должно быть в представлении
HTML5
1
 @Html.DropDownListFor(x => x.S_rankId, (SelectList)ViewBag.ID_rank, new { @class = "form-control" })
Мб кому поможет.


Спасибо большое sau за помощь!
0
09.11.2018, 23:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2018, 23:10

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

Несколько @Model в 1 представление ASP.NET MVC5
namespace Kino.Models { using System; using System.Collections.Generic; ...

Как в while засунуть несколько условий?
как-то так можно?(while ( (&lt;= r2 r1) &amp;&amp; (еще одно условие) ) (setq r2 (getreal &quot;Укажите еще раз...


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

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

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