我正在研究MVC 5应用程序并具有以下方案。 用户单击我的注册链接以创建帐户,并提供类似的视图。按预期工作。
[HttpGet]
[AllowAnonymous]
public ActionResult RenderRegisterModal(string userType)
{
IList<UserTypesDto> userTypes = _userService.GetUserTypes();
var usersRegisterUserViewModel = new UsersRegisterUserViewModel {UserTypes = new List<SelectListItem>()};
usersRegisterUserViewModel.UserTypes.Add(new SelectListItem
{
Text = "Select a registration type",
Value = "0"
});
foreach (UserTypesDto userTypeDto in userTypes)
{
usersRegisterUserViewModel.UserTypes.Add(new SelectListItem
{
Text = userTypeDto.UserType,
Value = userTypeDto.UserTypeId.ToString()
});
}
return PartialView("_RegisterModal", usersRegisterUserViewModel);
}
现在根据他们选择的customer / userType类型,我需要提供不同的视图。不应该有任何问题将视图转换为模态,因为它是ajax ...所以让我们称之为伪向导来收集数据。我正在考虑的问题以及这个可能简单的问题的基础,我在想太多,是如何保存每一步的数据?临时表? InMemory Cache使用会话ID作为密钥?饼干? “总收入”
该帖子的ActionMethod看起来像这样。
[AllowAnonymous]
[HttpPost]
public ActionResult Register(UsersRegisterUserViewModel usersRegisterUserViewModel)
{
//TODO Return a view for the next step based on the CustomerType contained in the viewModel
return View();
}
非常感谢任何反馈。
答案 0 :(得分:2)
选项1:
最简单的方法是,NEXT视图有一组hidden
个字段,其中包含在上一个视图中输入的信息,并将其发布到Action。
这样,一旦发布第二个视图,您将发布所有信息(前一个和您在第二个视图中输入的信息)。
选项2:
如果您对第一种方法不满意,可以在UserType组合更改中使用javascript中显示或隐藏的多个PartialView。您的ViewModel应具有在发回服务器之前保存信息所需的所有资产。
这个选项有两种版本:你在开头渲染你所有的usertype部分(所以你需要先隐藏它们),或者你可以在用户选择一个用户类型后通过Ajax获得部分。
选项3:
您可以使用Session来保存注册表单中的敏感数据,根据用户类型重定向到下一个视图,发布新表单,并在Action中从Session中检索信息...以及所有信息在你手中将它存储在数据库中。
答案 1 :(得分:0)
如果您正在使用剃须刀,请坚持使用模型的不同部分
@Html.EditorFor(model => model.data1)
@Html.EditorFor(model => model.data2) @*Wizard part 1*@
然后在向导的下一个视图中
@Html.HiddenFor(model => model.data1)
@Html.HiddenFor(model => model.data2)
@Html.EditorFor(model => model.data3)
@Html.EditorFor(model => model.data4) @*Wizard part 2*@
然后
@Html.HiddenFor(model => model.data1)
@Html.HiddenFor(model => model.data2)
@Html.HiddenFor(model => model.data3)
@Html.HiddenFor(model => model.data4)
@Html.EditorFor(model => model.data5) @*Wizard part 3...*@
依旧......