C# 如何在ASP.NET MVC 4中的两个完全不同的视图之间持久化数据?

C# 如何在ASP.NET MVC 4中的两个完全不同的视图之间持久化数据?,c#,asp.net-mvc,view,C#,Asp.net Mvc,View,我花了很长一段时间试图找出一个解决办法,但没有成功。我有一张表格。我将ASP.NETMVC4与jQuery Mobile一起使用。用户首先被引导到以下屏幕: 在这里,他们选择一个胶囊并单击提交他们选择的胶囊有一个主键值,我想保留到下一页。 单击“提交”后,他们将被带到: 在这里,他们将填写表格并单击“创建”。您在此屏幕截图上看到的填充物列表基于上一屏幕上选择的胶囊。因此,根据选择的胶囊,上面的填充列表可能会有所不同。如何保留在上一屏幕上选择的胶囊主键值并将其保留到下一屏幕(完全不同的视图)?

我花了很长一段时间试图找出一个解决办法,但没有成功。我有一张表格。我将ASP.NETMVC4与jQuery Mobile一起使用。用户首先被引导到以下屏幕:

在这里,他们选择一个胶囊并单击提交他们选择的胶囊有一个主键值,我想保留到下一页。

单击“提交”后,他们将被带到:


在这里,他们将填写表格并单击“创建”。您在此屏幕截图上看到的填充物列表基于上一屏幕上选择的胶囊。因此,根据选择的胶囊,上面的填充列表可能会有所不同。如何保留在上一屏幕上选择的胶囊主键值并将其保留到下一屏幕(完全不同的视图)?我知道我不能使用ViewBag,因为ViewBag仅在单个视图的范围内。本质上,我想要的是上面表单上的数据,以及在上一个视图中选择的胶囊的主键。

考虑一下这个psuedo代码,但本质上控制器可能是这样的

[HttpPost]
public ActionResult FormOnePost(ModelFromFormOne modelFromFormOne)
{
    var model = new ModelForFormTwo();
    model.Filters = IList<Filter> from database? query using id
    model.MoreStuff etc.
    return View("ViewTwoWithSecondForm", model);
}
[HttpPost]
公共行动结果FormOnePost(ModelFromFormOne ModelFromFormOne)
{
var model=newmodelforformtwo();
model.Filters=IList from database?使用id查询
模型、模型等。
返回视图(“ViewTwoWithSecondForm”,模型);
}

这可以防止在路径中暴露主键。

您需要将值从View1发布回服务器,然后通过控制器操作方法将其传递回View2: 下面是显示在服务器上发生的was的代码片段:

//Serve the view when the URL is requested
    public ActionResult ViewAllItems()
    { 
        return View();
    }


//Handle the posted form from the ViewAllItems page
 [HttpPost]
    public ActionResult ViewAllItems(int selectedItemId)
    { 
        RedirectToAction("ViewItemDetail", new { id = selectedItemId });
    }

    public ViewResult ViewItemDetail(int id)
    { 
       var item = repo.GetItem(id);
       return View(item);
    }
这里,带有控制器操作方法ViewAllItems的方法接收发布的值并重定向到ViewItemDetail方法,该方法随后加载项数据并将其传递给视图。因此,视图将被传递id(以及完整项)


这是一般的MVC模式,其中的值被传递给控制器操作方法,然后再传递回视图

您可以使保存值的变量保持静态

需要有一个关系,可以通过共享键或其他方式。如果我是你,我会使用
Enumeration
for
Capsule
来保存触发器值。迈克,看起来你仍然处于web表单的思维框架中(查看->查看)==(aspx页面-->aspx页面)。拥抱思考控制器->控制器。你目前的问题就是一个很好的例子。您发布的任何数据都将被发送到您的操作方法(控制器),并且可以在模型中轻松地传递到下一个视图。魔术就是控制器。模型就是媒体。视图就是容器。@Judo的答案更像orthidox。问题是当点击ViewAllItems时,我不能让它立即重定向到Action(“ViewItemDetail”)-这是因为我正在等待用户将数据输入表单,然后单击“创建”,然后它们将被定向到ViewItemDetail。我使用的是您的示例,因此最容易理解。ViewAllItems是HttpPost方法,它接收发布到服务器的表单。在经典的MVC设置中,还将有一个不带HttpPost的ViewAllItems,它将服务于第一次请求url的视图。我更新了答案以使其更清晰。不用担心,您可能需要一点时间来学习MVC教程。MVC模式需要一点时间来适应,主要是向服务器传递值。另外,还可以查看模型绑定到视图模型,这在教程中并不总是显示。