我想做一些类似于包含不同部分的调查问卷的东西。 因此,我创建了一个 Index.cshtml,其中包含相应的部分 View (取决于我的步长整数的数量)。类似的东西
@using (Html.BeginForm())
{
@Html.Partial("Step" + Model.Step, Model)
<p>
@if (Model.Step > 1)
{
<button name="button" value="Zurück" />
}
<input type="submit" value="Weiter" />
</p>
}
正如您可能已经注意到的,它会查找类似“Step1.cshtml”等的内容,例如放置相应输入掩码的位置
@model CVGen.Models.InputModel
<div class="editor-field">
@Html.TextBoxFor(model => model.Anrede)
@Html.ValidationMessageFor(model => model.Anrede)
</div>
我的模型包含整个调查问卷的属性,因此我当然希望每次都将整个模型传递到下一步/ View (如果我返回,模型也应该传递回来,以便信息是仍然在那里,用户可以编辑它)。 但这对我来说不起作用。我的 Controller 看起来像这样:
public ActionResult Index()
{
InputModel model = new InputModel();
return View(model);
}
[HttpPost]
public ActionResult Index(InputModel model)
{
model.Step++;
return View(model);
}
另外,我的 model.Step 属性始终为 0(或 1,在 HttpPost 中添加 1 后),这当然是因为我的模型不会再次传递。
有什么建议吗?
最佳答案
可能值得查看之前有关此主题的博客示例(以及此处的一些示例):
- http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx
- how to make a wizard with ASP.Net MVC
- Multi step wizard form with MVC
- multi-step registration process issues in asp.net mvc (splitted viewmodels, single model)
- Asp.net mvc wizard - Need some guidance
简而言之,无论是否允许 jQuery/javascript,我都会执行以下操作:
- 创建一个包含向导所需的所有字段的模型。
- 创建一个新 Controller (用于向导步骤)
- 为每个向导页面创建一个操作(同样,所有操作都应使用相同的向导模型)
- 在流程结束时创建一个SAVE操作,将所有内容保存到数据库中。
此外,在上面的示例中,您没有在表单标记内的 View 中包含“步骤”。回发时需要这样做。您应该添加类似以下内容:
@Html.HiddenFor(model => model.Step)
您的里程可能会有所不同 - 祝您好运
关于c# - 在 ASP.NET MVC 3 中多次传递模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600042/