gpt4 book ai didi

c# - 跨多个 Controller 操作使用 ViewModel

转载 作者:行者123 更新时间:2023-11-30 17:40:49 24 4
gpt4 key购买 nike

我正在创建一个 C# MVC 程序,用户可以在其中租用拖拉机设备。用户将选择他们想要的拖拉机类型(推土机、压路机等),然后被引导到一个屏幕,在那里他们可以选择制造该类型拖拉机的制造商(卡特彼勒、约翰迪尔等)。接下来,他们将被引导至该制造商提供的该类型拖拉机的可用型号列表。

目标是让 ViewModel 在每个步骤存储他们的输入,以便我在结帐时收集他们的决定。如果重要的话,我在每个步骤中存储的唯一数据是每个选择的特定 ID,这一切都是在一个 Controller 中使用多个操作完成的。最后,用户可以选择在他们的租赁票中添加另一台拖拉机,或者直接结账。因此,我需要一种方法来在新的租赁表格开始时初始化一个新的 ViewModel 对象,但如果他们选择在他们当前的票中添加更多拖拉机,则不创建新的 ViewModel 对象。

我的底线问题是,我似乎无法找到一种方法来在租赁过程的第一步中创建一个 ViewModel,该 ViewModel 将在整个过程中持续存在,同时存储数据。

如果有必要,我可以发布代码片段,但我主要只需要知道如何创建一个持久的 ViewModel 对象

最佳答案

你可以这样设计。正如您正确提到的那样,在这种情况下,设计中最重要的部分是您的 viewModel。因此,让我们将您的 OO 知识与 MVC 结合起来;

   public class MultiStepViewModel
{
public Step1Data Step1 { get; set; }
public Step2Data Step2 { get; set; }
public Step3Data Step3 { get; set; }

public string StepSummary { get; set; }
}

Step1Data, Step2Data... 是单独的 View 模型。它们是称为 MultiStepViewModel

的主视图模型的一部分

现在您必须为“MultiStepViewModel”(例如:MultiStepView)创建一个主视图。然后你可以创建document templates对于 Step1Data、Step2Data 等

您可以使用选项卡、菜单或任何其他方法来启动您的步骤。完成所有步骤后,您可以发布您的 MultiStepViewModel。它将包含您在每个步骤下填写的所有数据。

所以你的 Controller 将是这样的。

     public class MultiStepController : Controller
{
// GET: MultiStep
public ActionResult Index()
{
return View(new MultiStepViewModel());
}

[HttpPost]
public ActionResult PostMultiStepData(MultiStepViewModel model)
{
//your process logic
if (success)
{
return View("It was successfull");
}
else
{
return RedirectToAction("Index", "MultiStep", model);
}
}
}

PS:确保在 MultiStepViewModel 的构造函数中初始化您的 Step View 模型。我不确定您的 StepData 会是什么样子。如果所有步骤都相同,正如您可能知道的那样,则不需要多个 viewMODel。相反,您可以拥有一个 IENumerable 并相应地创建您的文档模板。

关于c# - 跨多个 Controller 操作使用 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837780/

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