2

一段时间以来,我一直在尝试找出解决方案,但无济于事。我有的是一个表格。我将 ASP.NET MVC4 与 jQuery Mobile 一起使用。用户首先被定向到以下屏幕:

在此处输入图像描述

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

一旦他们点击提交,他们将被带到:

在此处输入图像描述

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

4

3 回答 3

3

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

//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);
    }

在这里,带有 Controller Action 方法 ViewAllItems 的方法接收发布的值并重定向到 ViewItemDetail 方法,该方法然后加载项目数据并将其传递给视图。因此视图将被传递 id(连同完整的项目)。

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

于 2013-02-21T03:19:33.020 回答
0

考虑这个伪代码,但本质上控制器可能看起来像这样......

[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);
}

这样可以避免在路径中暴露您的主键。

于 2013-02-21T03:16:39.973 回答
0

您可以使变量保持值静态

于 2013-10-26T21:09:17.550 回答