修改一个对象MVC的多个视图

时间:2016-01-07 18:06:23

标签: asp.net-mvc

我正在构建一项需要稍微冗长的设置过程的服务。我将它分为4个模型和4个相应的视图。它们是Setup,Setup2,Setup3和Setup4。这些视图中的每一个都从用户收集存储在User对象中的信息。我一直在传递用户:

    [HttpPost]
    public ActionResult Setup(FormCollection values)
    {
        User registeringUser = new User();

        registeringUser.email = User.Identity.Name;
        registeringUser.fName = values["fName"];
        registeringUser.lName = values["lName"];
        registeringUser.phone = values["phone"];

        return RedirectToAction("/Setup2", registeringUser);
    }

出于某种原因,这似乎适用于第一次跳转(从Setup到Setup2),但在此之后我得到了奇怪的行为,例如User。将User传递给另一个View时设置为null。

在一个相关但略有不同的问题中,我需要最后一个屏幕(Setup4)是递归的。这个屏幕增加了一个用户注册的课程,如果他们没有检查"这是我的最后一堂课"按钮,它需要基本清除表格,以便他们可以进入另一个课程。

整个控制器看起来像这样:

    [HttpPost]
    public ActionResult Setup4(FormCollection values, User registeringUser)
    {
        // values["allClassesAdded"] returns "false" as a string if box is unchecked, returns "true,false" if checked.
        // Solution: parse string for "true"
        if (utils.parseForTrue(values["allClassesAdded"]))
        {
            // TODO Redirect to "congratulations you're done" page.
            database.CreateUserInDB(registeringUser);
            return Redirect("/Home");
        }
        else
        {
            // Build course and add it to the list in the User
            course c = new course(values);

            if (Request.IsAuthenticated)
            {
                //registeringUser.currentCourses.Add(c);
                registeringUser.AddCourse(c);
                return RedirectToAction("/Setup4", registeringUser); // <---- This doesn't really work right
                //return View();
            }
            else
            {
                return Redirect("/Account/Login");
            }


        }
    }

这是我与MVC的第一个项目,所以如果你发现我完全错误地完成了整个事情,请随时回答我提出的问题并提供适当的解决方案来解决这个问题。我将现有的(纯)C#项目移动到MVC,我主要只是坚持如何在MVC的有趣结构中工作。我非常感谢您能给予的任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将用户相关数据存储在session中,而不会在请求之间传递

像这样的Smth

[HttpPost]
public ActionResult Step1(Step1Model model)
{
   Session["UserRegistration"] = new UserRegistration
   {
      FirstName = model.fName,
      ....
   }
   ....
}


[HttpPost]
public ActionResult Step2(Step2Model model)
{
   var userRegistration = Session["UserRegistration"] as UserRegistration;
   if (userRegistration == null) { return Redirrect("Step1"); }
   userRegistration.SomeField = model.someField;
   ...
   Session["UserRegistration"]  = userRegistration;
   ....
}
相关问题