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

Ввод данных в Input и их последующий вывод на странице

27.06.2019, 21:33. Показов 7087. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Только начал осваивать MVC. Осваиваю по оф документам и сайту metanit.com

Под спойлером лирика о сложностях, можно пропустить.
Кликните здесь для просмотра всего текста
Простые вещи там описаны как то слишком сложно и запутано. К примеру, целая страница написана о разных методах как взять значение из Input, но не описано как это значение сохранить при перезагрузке страницы и вывести её в коде HTML. Где то советуют использовать методы, где то только контролеры. Использовать хелперы, не использовать. Пока непонятно в общем.


Есть код.

HTML
HTML5
1
2
3
4
5
6
7
8
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   <div class="form-group">
          <input type="email" class="form-control input-lg" id="exampleInputEmail2" placeholder="Your Email*">
   </div>
   <button type="submit" class="btn btn-info button">Подпишитесь</button>
   <p>@ViewData["Test"]</p>
}
Контролер HomeController
C#
1
2
3
4
5
6
public IActionResult Index(string exampleInputEmail2)
        {
            ViewData["Test"] = exampleInputEmail2 + "_ТестТекст";
 
            return View();
        }
При первой загрузке страницы значение пустое и ничего не выводиться. После нажатия кнопки, страница должна обновиться и на странице должна появиться надпись из Input с изменениями.

Здесь хочу вывести текст
C#
1
<p>@ViewData["Test"]</p>
Может кто-нибудь поправить мой код до рабочего состояния? И показать как использовать метод, если он тут необходим.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2019, 21:33
Ответы с готовыми решениями:

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

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

Страуструп. Упражнение. Ввод 3 чисел и последующий их вывод в порядке возрастания.
Добрый вечер. Я только-только начал изучать программирование и начал с книги Страуструпа - Принципы и практика использования С++. Решил...

7
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
27.06.2019, 22:10
Вывод нескольких DataTable

(читайте о переходе на MVC)

Добавлено через 6 минут
Возможно, вот этот фрагмент из работающего проекта поможет Вам понять "движок" MVC

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
        // Следующие 3 метода реализуют листание списка пользователем в браузере
        // Код их очень похож и состоит из:
        // Извлечение личной информации пользователя по полученному от браузера UserID
        // (Важно ! Этот ID контроллер заблаговременно "сообщил" браузеру, а тот лишь "вернул" его назад)
        //  Не забываем: после того, как контроллер передаст вью браузеру, он абсолютно все "забывает" и ему (контроллеру)
        //  постоянно нужно "напоминать" что он делал в прошлый раз :)
        // Получив данные о пользователе в виде объекта класса UsV_FullUsers, все методы
        // создают новый экземпляр контейнера (что неудивительно, ведь "старый" благополучно бы уничтожен самим приложением)
        // инициализируя его "старыми" значениями номер листа и колонки сортировки,
        // далее номер листа меняется согласно кнопке и соответствующему ей методу и 
        // выполняется вызов метода контейнера, считывающего с SQL-сервера соотв.образом обработанные и "порезанные" записи
        // списка абонентов.
        // Затем контейнер передается представлению
        // 
        public ActionResult NextList(string ColumnName, int NumList2, int UserID)
        {
            UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); 
            UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
            UsCont.NList = NumList2 + 1;
            UsCont.QRowsPerList = QRows;
            UsCont = UsCont.ContainerFillData(DB, UsCont);
            UsCont.SearchSample = "";
            return View("Index", UsCont);
        }
 
        public ActionResult PriorList(string ColumnName, int NumList2, int UserID)
        {
            UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); 
            UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
            UsCont.NList = NumList2 - 1;
            UsCont = UsCont.ContainerFillData(DB, UsCont);
            UsCont.SearchSample = "";
            return View("Index", UsCont);
        }
 
        public ActionResult ListGoTo(int UserID, string ColumnName, int NumList2)
        {
            UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); 
            UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
            UsCont.NList = NumList2;
            UsCont = UsCont.ContainerFillData(DB, UsCont);
            UsCont.SearchSample = "";
            return View("Index", UsCont);
        }
 
        // Метод реализует сортировку доступного списка по указанной колонке
        // Наименование колонки (вместе с USER_ID) перается от клиента браузером как параметр в Http-строке 
        // После сортировки текущей (отображаемой) страницей становится самая первая
        public ActionResult SortByColumn(int UserID, string ColumnName)
        {
            UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); // "Вспоминаем юзера"
            UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
            UsCont.NList = 1;
            UsCont = UsCont.ContainerFillData(DB, UsCont);
            UsCont.SearchSample = "";
            return View("Index", UsCont);
        }
 
        // Метод реализует поиск в отсортированной колонке указанного текстового образца
        // и, если находит запись (первую), то устанавливает тот номер листа, на которой
        // найдена запись. При этом учитываются все параметры, действующие при листании
        public ActionResult FindBySample( int UserID, string ColumnName, int NumList2, string Sample)
        {
            int NList = NumList2;  // Для возврата на текущий лист в случае неудачного поиска
            UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); // "Вспоминаем юзера"
            var SearchRes = DB.UsFN_FindAbonsAtList_BySample(UserInfo.REG_Name,UserInfo.TO_Name,ColumnName,ColumnName,Sample,0,QRows).FirstOrDefault();
            if (!(SearchRes == null))
                NList = SearchRes.NList;
            UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
            UsCont.NList = NList;
            UsCont = UsCont.ContainerFillData(DB, UsCont);
            UsCont.SearchSample = Sample;
            return View("Index", UsCont);
        }
Представление:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
@model MVCTBListed.Models.UserContainer
 
@{
    ViewBag.Title = "Index";
}
<!-- ПРВЕТСТВИЕ -->
<h2> Привет, 
    <!-- Если пользователя является абонентом, то приветствуется его ФИО, иначе - логин -->
    @{ 
        if (!String.IsNullOrEmpty(Model.UserFullInfo.ABONS_FIO))
        {
            @Model.UserFullInfo.ABONS_FIO
        }
        else    
        {
            @Model.UserFullInfo.USR_LOGIN
        }
        
     }
</h2>
 
<!-- РАЗДЕЛ УПРАВЛЕНИЯ И ИНФОРМАЦИИ -->
<table> 
   <tr>
      <td>
          <!-- Если у пользователя (абонента) не указан ни регион, ни ТО, то ему доступен весь список абонентов,
               если указан регион, то в пределах региона, если регион не указан, но указан ТО, то в пределах ТО -->
    @{
        string sHeader = "ВСЕ РЕГИОНЫ";         
        if (!String.IsNullOrEmpty(Model.UserFullInfo.REG_Name))
        {
            sHeader = " РЕГИОН: " + Model.UserFullInfo.REG_Name;
        }
        else
        {
            if (!String.IsNullOrEmpty(Model.UserFullInfo.TO_Name))
            {
                sHeader = " УПРАВЛЕНИЕ :" + Model.UserFullInfo.TO_Name;
            }
        }
        @sHeader
    }             
     </td>
     <td>  <!-- Кнопка "Выход" для возврата на страницу авторизации -->
        @Html.ActionLink("Выход", "Login") 
     </td>
     <td>  <!-- Кнопка для перехода на страницу добавления нового абонента (не пользователя) -->
        @Html.ActionLink("Добавить абонента", "AddNewAbon", new { UserID = Model.UserFullInfo.USR_ID }) 
     </td>  <!-- Кнопка для перехода на предыдущий лист (листание назад) -->
     @{ if (Model.NList > 1)
         {
           <td> @Html.ActionLink("Назад", "PriorList", new { ColumnName = Model.ColName, NumList2 = Model.NList, UserID = Model.UserFullInfo.USR_ID }) </td>
         }
     }
     <td>
         Лист @Model.NList из @Model.QAllLists
     </td> <!-- Кнопка для перехода на следующий лист (листание вперед) -->
     @{ if (Model.NList < Model.QAllLists)
         {
           <td> @Html.ActionLink("Вперед", "NextList", new { ColumnName = Model.ColName, NumList2 = Model.NList, UserID = Model.UserFullInfo.USR_ID }) </td>
         }
     }
 
    <td>  <!-- Для передачи введенного пользователем значения используется форма с кнопкой и текстбоксом -->
       <form action="/Home/ListGoTo" method="post"> 
          <input type="submit" id="SendButton" value="Перейти к листу" />
          <input class="text-box single-line" size = 5 id ="NL" name ="NumList2" type ="text" value = "@Model.NList" /> 
          <!-- Помещаем в скрытый (неотображаемый) элемент ID пользователя для передачи его контроллеру вместе с номером листа  -->
          <input type="hidden" id="H1" name="UserID" value="@Model.UserFullInfo.USR_ID">
          <!-- Помещаем в скрытый (неотображаемый) элемент Имя колонки сортировки для передачи его контроллеру вместе с номером листа  -->
          <input type="hidden" id="H2" name="ColumnName" value="@Model.ColName">
       </form>
    </td> 
    <td>  <!-- Для передачи введенного пользователем значения используется форма с кнопкой и текстбоксом -->
       <form action="/Home/FindBySample" method="post"> 
          <input type="submit" id="SendButton1" value="Поиск в упорядоченной колонке (S)" />
          <input class="text-box single-line" size = 80 id ="FCol" name ="Sample" type ="text" value = "@Model.SearchSample" /> 
          <!-- Помещаем в скрытый (неотображаемый) элемент № листа для передачи его контроллеру вместе с образцом -->
          <input type="hidden" id="H3" name="NumList2" value="@Model.NList">
          <!-- Помещаем в скрытый (неотображаемый) элемент ID пользователя для передачи его контроллеру вместе с образцом -->
          <input type="hidden" id="H4" name="UserID" value="@Model.UserFullInfo.USR_ID">
          <!-- Помещаем в скрытый (неотображаемый) элемент Имя колонки сортировки для передачи его контроллеру вместе с образцом  -->
          <input type="hidden" id="H5" name="ColumnName" value="@Model.ColName">
       </form>
    </td> 
 
   </tr>
</table>
 
<!-- РАЗДЕЛ СПИСОК АБОНЕНТОВ -->
<div> 
    <table border ="1">
    @{ int RowNum = (Model.NList - 1) * Model.QRowsPerList;}
       <tr> 
           <th>№ пп</th>
           <th> 
              @{ 
                 string S1 = "";
                 if (Model.ColName == "ABONS_FIO")
                 {  S1 = "(S)"; }
                 @S1
              }
              @Html.ActionLink("ФИО абонента", "SortByColumn", new { ColumnName = "ABONS_FIO", UserID = Model.UserFullInfo.USR_ID })          
           </th>
 
           <th>
              @{ 
                 string S2 = "";
                 if (Model.ColName == "TB_Number")
                 {  S2 = "(S)"; }
                 @S2
              }
              @Html.ActionLink("№ мобильный", "SortByColumn", new { ColumnName = "TB_Number", UserID = Model.UserFullInfo.USR_ID })          
           </th>
 
           <!-- Если весь список, то отображаются обе колонки "Регион" и "ТО", если только в пределах региона, то колонка "ТО",
                если в пределах ТО, то ни одна из двух колонок не отображается (при этом названия региона или ТО присутствуют 
               в разделе "УПРАВЛЕНИЕ И ИНФОРМАЦИЯ  -->
           @{
               if (String.IsNullOrEmpty(Model.UserFullInfo.REG_Name) && String.IsNullOrEmpty(Model.UserFullInfo.TO_Name))
               {
                  <th> 
                     @{ 
                         string S3 = "";
                         if (Model.ColName == "REG_Name")
                         {  S3 = "(S)"; }
                         @S3
                     }
                     @Html.ActionLink("Наименование региона", "SortByColumn", new { ColumnName = "REG_Name", UserID = Model.UserFullInfo.USR_ID }) 
                  </th>
                  <th> 
                     @{ 
                         string S4 = "";
                         if (Model.ColName == "TO_Name")
                         {  S4 = "(S)"; }
                         @S4
                     }
                     @Html.ActionLink("Наименование тер.органа", "SortByColumn", new { ColumnName = "TO_Name", UserID = Model.UserFullInfo.USR_ID }) 
                  </th>
               }
               else
               {
                  if (!String.IsNullOrEmpty(Model.UserFullInfo.REG_Name))
                  {
                     <th> 
                     @{ 
                         string S5 = "";
                         if (Model.ColName == "TO_Name")
                         {  S5 = "(S)"; }
                         @S5
                     }
                     @Html.ActionLink("Наименование тер.органа", "SortByColumn", new { ColumnName = "TO_Name", UserID = Model.UserFullInfo.USR_ID }) 
                     </th>
                  }    
               }
           }  
           <th> 
              @{ 
                 string S6 = "";
                 if (Model.ColName == "POS_NAME")
                 {  S6 = "(S)"; }
                 @S6
              }
              @Html.ActionLink("Должность", "SortByColumn", new { ColumnName = "POS_NAME", UserID = Model.UserFullInfo.USR_ID }) 
           </th>
           <th> 
              @{ 
                 string S7 = "";
                 if (Model.ColName == "ABONS_ADR")
                 {  S7 = "(S)"; }
                 @S7
              }
               @Html.ActionLink("Адрес", "SortByColumn", new { ColumnName = "ABONS_ADR", UserID = Model.UserFullInfo.USR_ID }) 
           </th>
           <th> 
              @{ 
                 string S8 = "";
                 if (Model.ColName == "ABONS_NOFIX")
                 {  S8 = "(S)"; }
                 @S8
              }
 
               @Html.ActionLink("№ гор.телефона", "SortByColumn", new { ColumnName = "ABONS_NOFIX", UserID = Model.UserFullInfo.USR_ID }) 
           </th>
 
       </tr>
    @foreach (var item in Model.ListAbons)
    {
        <tr>
           @{RowNum = RowNum + 1;}
            <td>@RowNum</td>
            <td>@item.ABONS_FIO</td>
            <td>@item.TB_Number</td>
           @{
               if (String.IsNullOrEmpty(Model.UserFullInfo.REG_Name) && String.IsNullOrEmpty(Model.UserFullInfo.TO_Name))
               {
                  <td>@item.REG_Name</td>
                  <td>@item.TO_Name</td>
               }
               else
               {
                  if (!String.IsNullOrEmpty(Model.UserFullInfo.REG_Name))
                  {
                     <td>@item.TO_Name</td>
                  }    
               }
            }
            <td>@item.POS_NAME</td>
            <td>@item.ABONS_ADR</td>
            <td>@item.ABONS_NOFIX</td>
        </tr>
    }
    </table>
 
</div>
1
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
27.06.2019, 23:18  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Информации о MVC действительно, океаны. И именно этот факт делает любой поиск весьма трудоемким. Тот же Metanit или Professorweb помогают реально в двух случаях: когда вообще ничего не знаешь или когда четко знаешь что тебе надо и ищешь именно это. Если же ситуация "рабочая", т.е. ты уже что-то сделал, а у тебя не выходит что нужно, тогда в 90% эти ресурсы ничего не дают. Хотя тратишь часы, читая и разбирая примеры, имеющие мало общего с твоими.
Спасибо, буду читать и разбираться.

П.С.: Выше Ваша же цитата на пост из ссылки. ) Ваш пример с таблицей очень интересный и я уже отложил его к себе в закладки, т.к. пригодиться. Но пока с пониманием у меня туго. Даже просто понять, если я всю работу всё равно буде делать в контроллере, то зачем мне нужен метод? И если контролер всё забывает, как же мне блин сохранить то значение, которое он получил из Input?

П.П.С: Да, я два дня штудировал и пробовал примеры из МС-доков и Metanit )) прежде чем здесь задать "глупый" вопрос. Так же как и Вы в свое время. Только Вы уже поняли, а я еще нет.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.06.2019, 01:43
Цитата Сообщение от defond57 Посмотреть сообщение
Даже просто понять, если я всю работу всё равно буде делать в контроллере, то зачем мне нужен метод
Методы добавляются в классы или интерфейсы для того, чтобы не повторять в контроллерах (или представлениях) один и тот же код - это как писать функции или процедуры для бэйсик, которые потом используются повсюду в приложениях (разных модулях и обработчиках событий). Кроме того, "вынос" функционала в классы - основа принципа инкапсуляции кода.

В приведенном выше примере был создан специальный класс - контейнер, в который можно "складывать" разные данные, как скалярные, та и сложные объекты и даже коллекции (наборы данных, считанные с SQL-сервера). Конструктор этого класса просто заполняет скалярные поля класса, которые в дальнейшем используются в логике приложения (в данном случае для выборки нужного списка абонентов с SQL-сервера, сортировки по нужной колонке и вырезания из полученного НД указанного номера листа). В этот класс был добавлен метод, который собственно делает выборку с SQL-сервера. Код метода был умышленно вынесен из конструктора чтобы не "дергать сервер" каждый раз, когда нужен контейнер без "таблицы", а только с информацией о юзере и скалярами.

Вот этот контейнер и используется как "грузовик" для перемещения данных от контроллера к представлению, от представления - браузеру и от браузера - контроллеру. Способы передачи разные - от прямой передачи контейнера в <form> (привязка к модели), до передачи отдельными скалярными переменными @Html.ActionLink..{ new ..}
0
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
28.06.2019, 13:30  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Возможно, вот этот фрагмент из работающего проекта поможет Вам понять "движок" MVC
Спасибо конечно за фрагмент кода, но стало только хуже, если честно.

C#
1
UserInfo = DB.UsV_FullUsers.FirstOrDefault(p => p.USR_ID == UserID); // "Вспоминаем юзера"
Это конечно круто, только откуда вспоминаем? DB - это что? По контектсу понятно, что что-то с базой данных? Какой БД? Как она вызывается? В каком месте активируется запрос?

C#
1
UserContainer UsCont = new UserContainer(NList, QRows, ColumnName, UserInfo);
Это что - класс, контроллер, модель? Какая там структура и код? Что и как работает? Где можно код посмотреть?

И всё равно непонятно, как и что делать. Всё в точности как с https://metanit.com/sharp/mvc5/2.2.php взял код примера, скопировал к себе, изменил Book на User - получил ошибку

HTML5
1
2
NullReferenceException: Object reference not set to an instance of an object.
 15.       @foreach (var b in ViewBag.User)
И хер его знает что и как работает. Т.е. сама MVC данные из БД получает, я по примерам пишу код один-в-один - получаю ошибки.

-----

За Вашу попытку помочь на самом деле большое спасибо, но разбирать чужой код в обрезанном виде и пытаться на его основе понять что и как работает, ну это так себе удовольствие. Вопросов больше, чем ответов. Самый главный вопрос - где взять недостающий код. А самое главное - я хочу взять любой текст из Input и после перезагрузки вывести его в любом месте страницы. Даже разметку написал в первом посте - как это можно сделать по коду, который работает с БД, да еще и не рабочий, если его тупо скопировать - ну я ХЗ.

Я убил время с 10:30 до 13:10, сравнивал Ваш код с доками и https://metanit.com/ везде одно и тоже реализовано разным кодом, и теперь я вообще не понимаю, что и как работает.

Добавлено через 3 минуты
У меня огромная просьба - в первом комменте темы я написал простой пример HTML разметки. Хочу взять данные из Input и по нажатию кнопки вывести на той же самой странице данные из Input с небольшими изменениями.

Может кто-нибудь написать рабочий код? Хочу его сравнить с тем что пишут в оф доках и https://metanit.com/, чтобы понять, что именно я не понимаю в описании.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.06.2019, 15:28
Лучший ответ Сообщение было отмечено defond57 как решение

Решение

Примитивный пример обмена данными между клиентом и сервером:

Модель:

C#
1
2
3
4
5
6
7
8
9
10
11
    public class UserContainer
    {
        public string Fam { get; set; }
        public string Name { get; set; }
        public string Name2 { get; set; }
 
        public UserContainer(string F, string N, string N2)
        {
            Fam = F; Name = N; Name2 = N2;
        }
    }
Контроллер:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Vasya.Models;
 
namespace Vasya.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            UserContainer UCon = new UserContainer("","","");
            return View(UCon);
        }
 
        [HttpPost]
        public ActionResult Index(string Fam, string Name, string Name2)
        {
            UserContainer UCon = new UserContainer(Fam, Name, Name2);
            return View(UCon);
        }
 
    }
}
Представление:

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
@model Vasya.Models.UserContainer
 
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        Привет, @Model.Fam &nbsp @Model.Name &nbsp @Model.Name2
       <form action="/Home/Index" method="post"> 
          <p><input class="text-box single-line" size = 20 id ="N1" name ="Fam" type ="text" value = "@Model.Fam" /> </p>
          <p><input class="text-box single-line" size = 20 id ="N2" name ="Name" type ="text" value = "@Model.Name" /> </p>
          <p><input class="text-box single-line" size = 20 id ="N3" name ="Name2" type ="text" value = "@Model.Name2" /> </p>
          <input type="submit" id="SendButton" value="Ok" />
       </form>
 
    </div>
</body>
</html>
Добавлено через 3 минуты
В класс-контейнер можно совать все, что угодно, вплоть до любых классов модели, включая данные, извлеченные с SQL-сервера. Главное - это заполнить в контроллере все, что нужно прежде, чем "вызвать" соотв. представление, типизированное по этому контейнеру.

Добавлено через 12 минут
А вот то же пример, но с обратной привязкой:

Модель:

C#
1
2
3
4
5
6
    public class UserContainer
    {
        public string Fam { get; set; }
        public string Name { get; set; }
        public string Name2 { get; set; }
    }
Контроллер:

C#
1
2
3
4
5
6
7
8
9
10
11
12
        [HttpGet]
        public ActionResult Index()
        {
            UserContainer UCon = new UserContainer();
            return View(UCon);
        }
 
        [HttpPost]
        public ActionResult Index(UserContainer US)
        {
            return View(US);
        }
Представление:

то же самое

Добавлено через 7 минут
В общем случае контейнер не обязателен. Он просто незаменим, если нужно передавать много данных разного типа.
Для Вашего случая вполне можно обойтись без него.
Для этого:
1) Вставить в представлении элемент, заполняемый например из "сумки" (ViewBag),
2) Перед вызовом представления в контроллере заполнить "сумку" нужным значением, взятым из параметра в методе контроллера (имя параметра контроллера и имя name в разметке элемента должны совпадать)
3) Не забыть поставить [Http Post] перед "принимающим" методом

Все
1
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
28.06.2019, 16:28  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Примитивный пример обмена данными между клиентом и сервером:
Спасибо! Вот искренне и от всей души! На основе Вашего объяснения накидал свой контроллер и модель - всё работает и правильно работает.

Есть пара вопросов:
1. Зачем в контроллере производится обработка GET? Если по факту он пустой?
2. Операции над данными производим в контроллере? Метод тогда зачем? Я думал в методе как раз и производим работу с данными. В контроллере собираем, вызываем классы из модели, где проводим изменения и основную работу, и передаем готовый результат уже в контроллер для последующей передачи в Разор.
3. Можете скинуть ссылку почитать по работе с БД и составлением запросов применительно к MVC? К примеру, мне нужно отправить запрос вида SELECT id,aaa,bbb FROM testTable WHERE aaa<'2019-01-01'
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.06.2019, 18:01
Цитата Сообщение от defond57 Посмотреть сообщение
1. Зачем в контроллере производится обработка GET? Если по факту он пустой?
GET/POST... относится не к контроллеру в целом, а к его методам.

Один и тот же метод (например "Login" для сценария авторизации) может быть реализован дважды - первый раз для выдачи "бланка" для заполнения, а второй - для получения уже бланка заполненного. Первый не имеет параметров и возвращает (передает браузеру) чистую страницу с названиями полей, сами поля при этом не заполнены. Поэтому он имеет [HttpGet], т.е. он (метод) ничего не ждет от браузера, а просто дает ему "чистую" страницу. После того, как юзер заполнил страницу-бланк и нажал на кнопку, в контроллер должна быть переслана эта информация, для чего служит второй метод с таким же именем, но уже с параметрами. Для этого "принимающий" метод имеет директиву [HttpPost]

Добавлено через 19 минут
Цитата Сообщение от defond57 Посмотреть сообщение
2. Операции над данными производим в контроллере? Метод тогда зачем? Я думал в методе как раз и производим работу с данными. В контроллере собираем, вызываем классы из модели, где проводим изменения и основную работу, и передаем готовый результат уже в контроллер для последующей передачи в Разор.
Куда засунуть код - в класс или в контроллер (вью) решает программист. Конечно, идеально весь код по максимуму убрать из контроллера (из вью тем более) например в репозиторий или в саму модель (с моделью все обстоит сложнее, т.к. при обновлении модели из БД весь код или часть его может пропасть). Все зависит от опыта и квалификации программиста.

Добавлено через 7 минут
Цитата Сообщение от defond57 Посмотреть сообщение
3. Можете скинуть ссылку почитать по работе с БД и составлением запросов применительно к MVC? К примеру, мне нужно отправить запрос вида SELECT id,aaa,bbb FROM testTable WHERE aaa<'2019-01-01'
В MVC существует огромное кол-во способов работы с БД. Я лично работаю с EDM. Как с ними работать надо смотреть либо в документации, либо на сайтах типа Metanit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2019, 18:01
Помогаю со студенческими работами здесь

Копирование строки. При вводе пробела программа пропускает последующий ввод данных
char st, st1; int k, m, i, j; system(&quot;cls&quot;); cout &lt;&lt;&quot;Введите строку&quot;&lt;&lt;endl; cin &gt;&gt;st; cout &lt;&lt;&quot;Введите номер символа,...

Поиск данных в текстовом файле и последующий вывод
Доброго времени суток, форумчане! Нужна ваша помощь. В колледже стал проходить C++ Builder, работаю с Embarcadero RAD Studio XE5, и...

SQL: Группирование записей таблицы, и последующий вывод данных
Доброго времени суток всем. Помогите с проблемкой. Есть таблица с платежами. Каждый студент может иметь несколько платежей. Это...

Чтение из файла данных и последующий вывод на экран в виде линейного однонаправленного списка
Здравствуйте, я новичок в программировании. Не понимаю как выполнить следующую задачу: Дан список группы в 10 человек в виде ...

Ввод/вывод из полей input и textarea в бд mysql с помощью php
суть такая... из бд выводятся комментарии для редактирования... вывод работает нормально... Страница: &lt;?php ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru