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

3

我习惯于使用Web表单,但现在转换到MVC 5,并且有一个创建多步应用程序表单的问题。

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

使用HTML表单在.cshtml中编写这个表单是否更容易?还是全部在控制器中完成?

谢谢!


你需要使用你的视图(view);cshtml文件。最佳实践是遵循模型视图控制器(MVC)模式,将标记和控制器分离。 - Botonomous
Darin Dimitrov已经在这个帖子中回答了你的问题。别忘了去看看。 - Aritra B
我会去查看一下。到目前为止,这些都是我不熟悉的内容,但希望我很快就能弄清楚。 - TheDizzle
2个回答

9
MVC,顾名思义,包含模型(Model)、视图(View)和控制器(Controller)。要创建表单,您需要设置一个作为您的模型的类,其中包含在特定视图中需要处理的属性。这与您的实体(entity)不同,实体是与数据库中的表相对应的类。有时可以使用实体作为模型,但特别是在多步骤表单的情况下,您不希望将数据持久化直到最后,这意味着它们需要分开。
这就引出了“视图模型”(view models)的话题,它实际上来自另一个称为MVVM的不同模式。无论如何,这些视图的模型将是一系列仅包含特定步骤需要收集的信息的视图模型。最后,您将通过创建实体的实例并将每个视图模型的属性值映射到其中来汇总所有收集的数据。然后,您将保存实体。
至于在请求之间持久化收集的数据,这就是您的会话(session)发挥作用的地方。您只需将每个发布的视图模型添加到您的“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);
}

谢谢你。我得试一试,看看结果如何。我以前从未使用过MVC之类的东西,所以感觉像个初学者。 - TheDizzle

5
您的所有表单信息将会在.cshtml文件中呈现如下:
@using (Html.BeginForm("Controller Action Method", "Controller Name", FormMethod.Post, new { id = "Form Name" }))
{
// Form Elements here
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接