MVC4 - 在视图之间传递模型

时间:2013-11-22 13:08:32

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-viewmodel

我有一个模型,我想要填写这样的步骤: actionresult1(模型) - > actionresult2(模型)-actionresult3(模型)

我的exaple模型是Person:

public class Person{
  string FirstName {get;set;}
  string Lastname {get;set;}
  int Age {get;set;}
}

在我的PersonController中,我有三个ActionResults:

public ActionResult FillFirstName(Person model)//First page where i start. Model is empty
    {
            return View("~/Views/FillFirstName.cshtml", model);           
    } 
public ActionResult FillLastName(Person model)//Second page, where first name is filled
    {
            return View("~/Views/FillLastName.cshtml", model);           
    } 
public ActionResult FillAge(Person model)//When i click submit button in FillLastName.cshtml view then it submits form here and model have filled only LastName and FirstName is empty.
    {
            return View("~/Views/FillAge.cshtml", model);           
    } 

我的三种观点是:

1)FillFirstName.cshtml

@using (@Html.BeginForm("FillLastName", "Person"))
{
   @Html.TextBoxFor(m => m.FirstName)
   <input type="submit" name="Next" value="Next" />
}

2)FillLastName.cshtml

@using (@Html.BeginForm("FillAge", "Person"))
{
   @Html.TextBoxFor(m => m.LastName)
   <input type="submit" name="Next" value="Next" />
}

3)FillAge.cshtml

@using (@Html.BeginForm("NextAction", "Person"))
{
   @Html.TextBoxFor(m => m.Age)
   <input type="submit" name="Next" value="Next" />
}

问题:当我尝试在视图之间传递模型时,它包含了我在上一个视图中提交的数据。

原因:我已经形成了2000行,我想把它剪成小块。

我是否可以使用Viewbag或ModelState或其他东西来保持模型中包含我在之前页面上提交的所有数据?有人可以给我一些例子吗? :)

1 个答案:

答案 0 :(得分:1)

HTTP是无状态的 - 模型只能绑定当前请求中的内容。因此,要访问上次控制器操作中的所有内容,您需要确保在请求的表单中发送所有内容。使用隐藏字段在多个视图上保留数据:

FillLastName:

@using (@Html.BeginForm("FillAge", "Person"))
{
   @Html.HiddenFor(m => m.FirstName)
   @Html.TextBoxFor(m => m.LastName)
   <input type="submit" name="Next" value="Next" />
}

填充率:

@using (@Html.BeginForm("NextAction", "Person"))
{
   @Html.HiddenFor(m => m.FirstName)
   @Html.HiddenFor(m => m.LastName)
   @Html.TextBoxFor(m => m.Age)
   <input type="submit" name="Next" value="Next" />
}

与使用会话状态等“伪状态”机制相比,这是一种更简洁,更传统的方法,可以在多个请求上保留表单数据。