[英]How do I create a form in asp.net MVC 5
我已经习惯了网络表单,但我转而使用MVC 5并且有关于创建多步骤申请表的问题。
此表单就像一个向导,然后将显示在每个步骤中输入的信息,然后提交。
是否更容易在.cshtml中使用html表单编写或在控制器中完成所有操作?
谢谢
顾名思义,MVC有一个模型,一个视图和一个控制器。 要创建表单,请设置一个将充当模型的类,其中包含需要在特定视图中使用的属性。 这与您的实体不同,后者对应于数据库中的表。 有时您可以将实体用作模型,但特别是在多步形式的情况下,您不希望将数据持久到结束,这意味着它们需要分开。
这将我们带到视图模型的主题,它实际上来自另一种称为MVVM的模式。 无论如何,这些视图的模型将是一系列视图模型,其中仅包含特定步骤需要收集的信息。 最后,您将通过创建实体实例并将每个视图模型中的属性值映射到它来将所有收集的数据组合在一起。 然后,您将保存实体。
现在,只要在请求之间保持收集的数据,就是会话进入的地方。您只需将每个发布的视图模型添加到Session
对象中,然后最后从Session
对象中获取所有这些模型以创建你的实体。
因此,每个POST操作都将具有以下内容:
[HttpPost]
public ActionResult Step1(Step1ViewModel model)
{
if (ModelState.IsValid)
{
Session["Step1"] = model;
return RedirectToAction("Step2");
}
// errors
return View(model);
}
然后,你最后的POST动作:
[HttpPost]
public ActionResult StepFinal(StepFinalViewModel)
{
if (ModelState.IsValid)
{
var myEntity = new MyEntity();
var step1 = Session['Step1'] as Step1ViewModel;
myEntity.SomeField = step1.SomeField;
// ... repeat for field in view model, then for each step
db.MyEntities.Add(myEntity);
db.SaveChanges();
Session.Remove('Step1');
// repeat for each step in session
return RedirectToAction("Success");
}
// errors
return View(model);
}
您的所有表单信息都将在.cshtml文件中,如下所示:
@using (Html.BeginForm("Controller Action Method", "Controller Name", FormMethod.Post, new { id = "Form Name" }))
{
// Form Elements here
}
然后,您只需添加一个提交按钮,将表单提交给您的Controller进行处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.