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

Я теряю данные на пути Controller-View-Controller. Как правильно получить модель из представления?

27.01.2018, 14:39. Просмотров 456. Ответов 7
Метки нет (Все метки)

У меня есть модель, которая содержит несколько свойств. Есть List<Point> и ThranslatingCam. Свойство ThranslatingCam содержит свойства, которые должны вводиться пользователем.
C#
1
2
3
4
5
public class TranslatingCamModel
{
   public TranslatingCam Cam { get; set; }
   public List<Point> Points { get; set; }
}
Сейчас я использую Points только для визуализации, но в будущем этот список будет изменен пользователем.

В контроллере я инициализирую Points, добавлю его в мой TranslatingCamModel и отправлю его в представление.
C#
1
2
3
4
5
6
7
8
9
10
11
12
public ActionResult Cam()
{
   TranslatingCamModel model = new TranslatingCamModel();
   List<Points> points = new List<Points>();
 
   //here I add same data to the points list
 
   model.Points = points;
   model.Cam = new TranslatingCam();
 
   return View("TranslatingCam", model);
}
Этот код работает так, как я хочу. Моя проблема еще дальше.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@model CamShaft.WebUI.Models.TranslatingCamModel
 
@{
    ViewBag.Title = "Cam";
}
 
<div class="prop">
    @using (Html.BeginForm("DrawTranslatingCam", "Home"))
    {
      @Html.LabelFor(model => model.Cam.Rmin, htmlAttributes: new { @class = "control-label col-md-2" })
      @Html.EditorFor(model => model.Cam.Rmin, new { htmlAttributes = new { @class = "form-control" } })
      // И то же самое для других свойств Cam
      <input type="submit" value="Draw" />
    }
</div>
// Вот мой код для визуализации и т. Д. И здесь я могу работать с model.Points.
Он работает нормально я получаю данные для Cam, но я теряю свой Points list.
C#
1
2
3
4
public ActionResult DrawTranslatingCam(TranslatingCamModel model)
{
    // Здесь у меня есть модель, возвращаемая из представления
}
Здесь model.Cam с введенными данными пользователя, но model.Points = null. Но я инициализировал его, прежде чем отправил его в представление.

Я попытался решить, используя @Html.HiddenFor:
HTML5
1
2
3
4
5
6
7
8
9
@using (Html.BeginForm("DrawTranslatingCam", "Home"))
{
    @Html.LabelFor(model => model.Cam.Rmin, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(model => model.Cam.Rmin, new { htmlAttributes = new { @class = "form-control" } })
    //And the same for the other Cam's properties
 
    @Html.HiddenFor(model => model.Points)
    <input type="submit" value="Draw" />
}
В этом случае возвращается Points, но без данных (не null, только с count = 0)

Итак, как я могу получить мою модель из представления?

Код был слегка изменен для компактности и четкости.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2018, 14:39
Ответы с готовыми решениями:

Получить данные из View в Controller
В формочке пользователь вводит число, это число необходимо занести в единственную переменную int...

Данные из View в Controller
Всем привет. Пытаюсь разобраться с MVC и не могу решить проблемму. Из View в Controller...

Данные из View не передаются в Controller
Знаю, что уже есть полно подобных тем, но нигде увы не нашел ответа. Почему-то данные из вьюхи не...

Передать данные из View в Controller
Например есть некоторое View. @{ ViewBag.Title = &quot;Index&quot;; } &lt;h2&gt;Index&lt;/h2&gt; &lt;script...

Передача данных, отображенных во View, в Controller
Здравствуйте, товарищи! Есть вюха корзины, которая отображает выбранные товары: @model...

7
kmaffa
314 / 307 / 150
Регистрация: 29.10.2012
Сообщений: 853
28.01.2018, 12:29 2
Вот тут ошибка, так нельзя передавать объекты:
C#
1
@Html.HiddenFor(model => model.Points)
0
vitalyuha
0 / 0 / 0
Регистрация: 19.09.2016
Сообщений: 8
28.01.2018, 17:21  [ТС] 3
kmaffa, неа, это я уже пробывал как-то передать эту колекцию в возращаемую модель.
Вот в том то и вопрос, как правильно передать это?
0
kmaffa
314 / 307 / 150
Регистрация: 29.10.2012
Сообщений: 853
28.01.2018, 17:31 4
Надо всю коллекцию Points "отрисовать" на форме, чтобы она потом отправилась обратно с данными формы.
Примером "отрисовки" является генерируемый автоматический метод (действие) Details, но там встанет вопрос как идентифицировать элементы коллекции?
Вот два способа:
1) помещать элементы коллекции в массив - надо отслеживать данные;
2) помещать данные в блоки div и собирать используя JS и Ajax.

Насколько я понял данная коллекция не изменяется на странице, если так, то зачем ее (коллекцию) гонять на страницу и обратно?
1
28.01.2018, 17:31
Kill100
427 / 293 / 81
Регистрация: 11.12.2010
Сообщений: 1,209
Завершенные тесты: 1
29.01.2018, 12:36 5
C#
1
model.Points
Если она не изменяемая но уникальная в контексте пользователя, то просто запихни её в сессию пользователя. И от туда юзай. Но гонять её туда сюда, это плохая идея. (хотя бы по тому что ушлый юзер сможет её поменять, и после отправки вы получите не то что хотели (и это реально так бывает, у меня уже пройденный этап.))
1
kmaffa
314 / 307 / 150
Регистрация: 29.10.2012
Сообщений: 853
29.01.2018, 12:45 6
Цитата Сообщение от Kill100 Посмотреть сообщение
... просто запихни её в сессию пользователя...
Да, про сессии совсем забыл.
0
vitalyuha
0 / 0 / 0
Регистрация: 19.09.2016
Сообщений: 8
03.02.2018, 12:00  [ТС] 7
Цитата Сообщение от Kill100 Посмотреть сообщение
хотя бы по тому что ушлый юзер сможет её поменять
Цитата Сообщение от kmaffa Посмотреть сообщение
если так, то зачем ее (коллекцию) гонять на страницу и обратно?
А в результате она и должна меняться пользователем. Просто на данном этапе к этому еще не дошел.
0
kmaffa
314 / 307 / 150
Регистрация: 29.10.2012
Сообщений: 853
06.02.2018, 17:32 8
Цитата Сообщение от vitalyuha Посмотреть сообщение
А в результате она и должна меняться пользователем. Просто на данном этапе к этому еще не дошел.
Если на данном этапе она не нужна, то может и не трогать ее пока и положить эту коллекцию в переменную сессии?
0
06.02.2018, 17:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2018, 17:32

Передача параметров из View в Controller через ViewBag
Добрый день! У меня есть контроллер, который получает значение ID и передает в ViewBag: public...

Связывание Controller и View aspx в ASP.NET 4.5
Всем привет!!! Я хочу узнать одну вещь. Допустим, у меня есть MVC приложение на ASP.NET. В ней есть...

Передача объекта-коллекции между View и Controller
Задача такая. Есть таблица статических данных. +DropDownListFor +Таблица. Модель данных: ...


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

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

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