如何在asp.net MVC 5中创建表单

本文关键字:创建 表单 MVC net asp | 更新日期: 2023-09-27 17:57:30

我习惯了web表单,但正在切换到MVC 5,并对创建多步骤应用程序表单有疑问。

这个表单就像一个向导,然后会在最后显示在每个步骤中输入的信息,然后提交。

在.cs.html中使用html表单写这篇文章更容易吗?还是在控制器中全部完成?

THank you

如何在asp.net MVC 5中创建表单

顾名思义,MVC有一个Model、一个View和Controller。要创建窗体,您需要设置一个类,该类将充当您的模型,包含在特定视图中需要使用的属性。这与实体不同,后者是与数据库中的表相对应的类。有时您可以将实体用作模型,但特别是在多步骤表单的情况下,您不希望将数据持久化到最后,这意味着它们需要分开。

这就引出了视图模型的主题,它实际上来自另一种称为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
}

然后,您可以简单地添加一个提交按钮,将表单提交给控制器进行处理。