gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:22:27 25 4
gpt4 key购买 nike

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

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

在 .cshtml 中使用 html 表单编写此代码更容易,还是在 Controller 中全部完成?

谢谢

最佳答案

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

这将我们带到了 View 模型的主题,它实际上来自另一种称为 MVVM 的不同模式。无论如何,这些 View 的模型将是一系列 View 模型,其中仅包含特定步骤需要收集的信息。最后,您将通过创建实体的实例并将每个 View 模型的属性值映射到它来将所有收集到的数据拼凑在一起。然后,您将保存该实体。

现在,就持久化请求之间收集的数据而言,这就是您的 session 的来源。您只需将每个发布的 View 模型添加到您的 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);
}

关于c# - 如何在 asp.net MVC 5 中创建表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com