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

Значение из ViewBag использовать в контролере

20.01.2019, 17:27. Просмотров 543. Ответов 5
Метки нет (Все метки)

Подскажите, как вытянуть значения из ViewBag по отдельности?
Представление
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
@{
    ViewBag.Title = "Программа";
}
<div style="text-align: center;">
    @using (Html.BeginForm("Index", "User"))
    {
        @Html.DropDownList("list1",
                         new SelectList(new[] {  "ID", "Username", "Фамилия" }))
 
        @Html.TextBox("TextBox1")
        <input type="submit" name="button" value="Поиск" />}      
</div>
 
@foreach (var user in ViewBag.users)
{
<div>   
    <table width="100%" border="1" bgcolor="#ffcc00" cellpadding="5" cellspacing="1">
              
        <tr>              
            <td>
                <label><b>Id:&nbsp;</b></label>@user.Idu<br>
                <label><b>Username:&nbsp;</b></label> @user.UserName<br>
                <label><b> Имя:&nbsp;</b></label>@user.FirstName &nbsp; @user.LastName<br>
                 <b> @user.Phone</b><br> <label><b>Регион: </b></label>??????<br> 
            </td>
Запрос к базе в контролере

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        public UserModel userModel = new UserModel();
        public MessageModel messageModel = new MessageModel();       
        public PhoneModel phonesModel = new PhoneModel();
 
 
public ActionResult Index(string list1, string TextBox1)
 
        {
            ViewBag.Selected1 = list1;
 
            if (ViewBag.Selected1 == "Username")
            {
                ViewBag.users = userModel.findByUser(TextBox1);       
 
            }
            if (ViewBag.Selected1 == "ID")
            {
                ViewBag.users = userModel.findById(TextBox1);          
            }
            if (ViewBag.Selected1 == "Фамилия")
            {
                ViewBag.users = userModel.findBySur(TextBox1);              
            }
Нужно номер телефона, который получен во ViewBag, отправить в следующий метод, который ищет принадлежность к региону в другой коллекции, а username в третий метод, который ищет доп информацию о пользователе.
База на mongo, как пройтись здесь по нескольким коллекциям сразу, не знаю, метод вот такой
C#
1
2
3
4
5
6
7
8
public List<User> findById(string TextBox1)
        {
            var bQuery = "{ id : " + TextBox1 + "}";           
            var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(bQuery);
            var result = userCollection.FindSync(filter).ToList();          
                return result;
           
        }
И еще не понятно, как выводить информацию в таблицу, ведь foreach в foreach вложить не получится в представлении.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2019, 17:27
Ответы с готовыми решениями:

Как правильно использовать ViewBag?
Форумчане, помогите пожалуйста новичку. Вопрос наверное глупый, но никак не могу...

Теряется значение свойства ViewBag
Здравствуйте, коллеги. Есть хорошая онлайн-книга по ASP.NET MVC 4. Дошёл до главы &quot;частичные...

Как передать в ViewBag значение введённое в html-элемент
как передать в ViewBag значение введённое в html-элемент &lt;input type=&quot;text&quot; id=&quot;datepicker&quot; /&gt;...

Обработка JSON в контролере
Доброго времени суток, форумчане! В ходе работы с Яндекс API(Directory API) получаю вот такую...

Получение доменного имени пользователя в контролере
Добрый день. Необходимо получить доменное имя для проверки в проекте MVC. Имя получается...

5
OwenGlendower
Супер-модератор
Эксперт .NET
10208 / 8816 / 3771
Регистрация: 17.03.2014
Сообщений: 17,719
Записей в блоге: 1
20.01.2019, 23:43 2
Sveta822, в представление нужно передавать полностью сформированные данные. Поэтому вопрос о передаче данных из view не должен стоять. По идее у User уже есть свойства хранящие связанную информацию. Соответственно нужно передавать в View коллекцию User-ов и выводить всю необходимую информацию из каждого объекта.

Цитата Сообщение от Sveta822 Посмотреть сообщение
ведь foreach в foreach вложить не получится в представлении.
Получится
1
Sveta822
0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 23
21.01.2019, 17:19  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
По идее у User уже есть свойства хранящие связанную информацию.
Вот прям не представляю, как вытянуть эти данные из метода

C#
1
  ViewBag.users = userModel.findByUser(TextBox1);
Ничего не могу найти похожего. Сохранить в локальную переменную не получается
И еще не понимаю почему два метода вместе не работают. Если один и методов вынести за фигурные скобки, то оба работают, а так только первый.
C#
1
2
3
4
5
 if (ViewBag.Selected1 == "Username")
            {
             ViewBag.users = userModel.findByUser(TextBox1);           
              ViewBag.message = messageModel.findByUser(TextBox1);          
            }
Добавлено через 2 часа 6 минут
С двумя методами разобралась, со вложенным foreach тоже. Вопрос по ViewBag открыт
0
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
534 / 460 / 208
Регистрация: 16.10.2010
Сообщений: 1,838
Завершенные тесты: 2
22.01.2019, 11:22 4
Цитата Сообщение от Sveta822 Посмотреть сообщение
Значение из ViewBag
Прямого доступа нет. Это работает только в одно сторону.

Для того чтобы переделать данные в контроллер используйте гет\пост запросы.
К примеру хорошим вариантом будет HTML форма
1
Sveta822
0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 23
23.01.2019, 12:59  [ТС] 5
Цитата Сообщение от lvlkoo Посмотреть сообщение
Для того чтобы переделать данные в контроллер используйте гет\пост запросы.
К примеру хорошим вариантом будет HTML форма
Можно поподробнее?
0
Sveta822
0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 23
14.02.2019, 07:46  [ТС] 6
Нашла такой способ. Фамилия передается во второй метод, но, к сожалению, только первая из ViewBag.users, хотя их там может быть и 100. Почему так не понимаю, помогите разобраться. В представление все выводится

C#
1
2
3
4
5
6
7
8
if (ViewBag.Selected1 == "Username")
            {
             ViewBag.users =  from c in userModel.userCollection.AsQueryable<User>() where c.UserName ==(TextBox1) select c;    
               foreach(User u in ViewBag.users)
            {
              ViewBag.message = messageModel.findByUser(u.LastName);          
            }
}
0
14.02.2019, 07:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2019, 07:46

Не работает ViewBag
Добрый день! Есть такая проблема: В контроллере выбираю данные из БД: var data =...

ViewBag со списком
var pages = from p in db.Pages select new { p.PageTitle, p.PageUrl }; ViewBag.Pages = pages;...

Использование ViewBag во View
Если во вьюшки два раза идет обращение к viewbag.count,то лучше записать в переменную и вызвать...


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

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

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