Как правильно обрабатывать WIZARD для регистрации в ASP.NET MVC3? - PullRequest
2 голосов
/ 02 марта 2011

Я пытаюсь создать мастер регистрации, который будет состоять из 3 страниц, но я не уверен, как я могу передавать данные между страницами.

Сначала я попытался использовать return RedirectToAction("New", "Authentication", newUser);, где newUser был экземпляром пользователя, который содержит начальную информацию о первой странице (которая является их идентификатором OpenId и любыми дополнительными метаданными, предоставленными провайдером.)

Когда я это сделал, я заметил, что все данные (которые существовали) были в строке запроса HEADER:

Request URL:http://localhost:1200/Account/New?UserId=0&OpenIds=System.Collections.Generic.List%601%5BSystem.String%5D
Request Method:GET
Status Code:200 OK

Меня беспокоит, что он может быть открыт для серьезных атак / злоупотреблений, особенно если там есть идентификатор openId (не говоря уже о том, что значение OpenId неверно, он не сериализировал IList<string> правильно.)

Так у кого-нибудь есть предложения?

Ответы [ 5 ]

1 голос
/ 14 марта 2011

Я использовал TempData для хранения данных между запросами. И я также использовал TempData.Keep(), чтобы убедиться, что это еще один запрос на обработку ошибок, когда мне нужно показать какое-то сообщение об ошибке.

0 голосов
/ 02 марта 2011

В книге Стива Сандерсона о MVC 2 в ней подробно обсуждается эта тема и приводится рабочий пример того, как передавать данные назад и вперед между шагами мастера.

Я бы купил книгу и посмотрел на найденное там решение.

Edit:

Как указано в комментарии, ознакомьтесь с примером на стр. 477, глава 13. Он охватывает вашу проблему.

Почему это действительно как ответ, а не комментарий?

Люди, просматривающие бесчисленные потоки, найдут прямую ссылку на то, как решить проблемы мастера.

Комментарии легко игнорируются и упускаются из виду разработчиком, пытающимся найти решение проблемы.

0 голосов
/ 02 марта 2011

Для RedirectToAction вам нужно передать объект И имя для маршрута:

return RedirectToAction("New", "Authentication", new { id=newUser});

Также см. «Как RedirectToAction ...»

0 голосов
/ 02 марта 2011

Можно ли использовать объекты ViewData или ViewBag для временного хранения, пока не пройдете все 3 шага?

0 голосов
/ 02 марта 2011

Я бы сохранил эту информацию в объекте Session.

Session["UserObject"] = MyUserObject

Затем получите его с помощью

var myUser = Session["UserObject"] as MyUserClass;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...