Как передать данные модели через представления в MVC? - PullRequest
3 голосов
/ 23 июля 2011

Я пытаюсь выяснить, как передать модель между представлениями

Вот что я делаю, у меня есть представления Register, RegisterConfirm, RegisterComplete.

Пользователь начинает сЗарегистрируйтесь, заполните информацию, клики продолжаются и публикуется в RegisterConfirm, где они отмечают флажок, чтобы согласиться с политикой конфиденциальности, а затем отправляют сообщение в RegisterComplete, который создает пользователя на основе модели в первом представлении реестра.1008 *

Просмотреть форму


Register:
    @using (Html.BeginForm("RegisterConfirm", "Account", FormMethod.Post, new { @id = "create" }))
    {

Register Confirm:
    @using (Html.BeginForm("RegisterComplete", "Account", FormMethod.Post, new { @id = "create" }))
    {


Проблема в том, что когда я попадаю в RegisterComplete, значения модели пусты ... есть идеи или это невозможно?Или это должно сработать, и мне нужно перепроверить мой реестр?

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Вы можете использовать TempData, хранить в нем свою модель и получать от нее свою модель

[POST("Account/Register/Confirm")]
            public ActionResult RegisterConfirm(RegisterModel model)
            {
                if (ModelState.IsValid)
                {
                    //store data for any other request
                    TempData["newUser"]=model;

                    return View();
                }
                else { return View("Register", model); }
            }

        [POST("Account/Register/Complete")]
        public ActionResult RegisterComplete(RegisterModel model, bool agree)
        {
            //retrieve data back irrespective of use choice 
            //to clear memory

            RegisterModel newUser= TempData["newUser"];

            if (agree) { 
                // Create User
                //use newUser
            }
            return View("Register", model);
        }
4 голосов
/ 23 июля 2011

В вашем представлении RegisterConfirm используются элементы только для отображения для отображения регистрационной информации? Если это так, MVC не сможет связать данные для заполнения модели.

Вам необходимо отобразить модель как элементы ввода, даже если они скрыты, чтобы связыватель модели мог заполнить RegisterModel (вы можете отобразить свойства как скрытые элементы для «хранения данных» и выходные элементы для отображения).

Если вы используете элементы Input, убедитесь, что имена этих элементов соответствуют именам свойств RegisterModel, в противном случае механизм привязки модели не сможет заполнить RegisterModel.

Если по какой-либо причине вы не можете поместить данные в элементы ввода в представлении RegisterConfirm, вам необходимо хранить данные где-то на стороне сервера, либо в состоянии сеанса (либо в TempData, которая в любом случае использует состояние сеанса ) или в базе данных некоторого описания.

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

...