我有一个模型,我想要填写这样的步骤: 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或其他东西来保持模型中包含我在之前页面上提交的所有数据?有人可以给我一些例子吗? :)
答案 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" />
}
与使用会话状态等“伪状态”机制相比,这是一种更简洁,更传统的方法,可以在多个请求上保留表单数据。