0

我有两个视图:第一个有一个表单,当它提交时,它会填写一个模型视图(QuizzModelView)。

现在提交后,我被重定向到另一个视图,该视图也有一个我要提交的表单。问题是我想对两个视图使用相同的 QuizzModelView。这意味着,在提交第二个表单时,我还想提交前一个表单的值。我可以通过创建隐藏输入来做到这一点,这些输入采用来自第一个视图的值。

有没有办法在没有隐藏输入的情况下做到这一点。

谢谢

编辑:解释更多:

我的模型视图包含:QuizzModelView.field1、QuizzModelView、.field2

  • 第一步:View1 将填写 QuizzModelView.field1

  • 第二步:我被重定向到 view2

  • 第三步:View2 将填写 QuizzModelView.field2

现在我希望能够得到 QuizzModelView.field1 和 QuizzModelView.field2。但我只得到 QuizzModelView.field2 因为提交 View2 时 QuizzModelView.field1 丢失

这是我的行动:

[HttpPost]
public ActionResult TAFPart2PopupEvents(QuizzModelView model)
{
    return PartialView("PartialViews/_TAFPart2PopupEvents", model);
}


[HttpPost]
public ActionResult TAFPart3PopupEvents(QuizzModelView model)         
{
    // here I want to use 
    // model.field1 and model.field2
}
4

2 回答 2

0

如果您希望您的TAFPart3PopupEvents操作可以访问数据,则需要将其存储在某个地方。有许多不同的选项(会话、查询字符串、数据库),但我认为隐藏输入(通常)是最简单的。

于 2012-04-18T14:37:28.090 回答
0

从技术上讲(迂腐),您将无法使用模型的相同实例。但是,您可以将其放入会话中并通过重定向传递。Session 的优点是不像隐藏字段那样容易被篡改。另外,您不必为每个步骤实际绑定整个模型 - 只需每个步骤中的单个字段:

[HttpPost]
public ActionResult TAFPart2PopupEvents(string field1)
{
    QuizzModelView model = new QuizzModelView();
    model.Field1 = field1
    Session["Quiz"] = model;

    return PartialView("PartialViews/_TAFPart2PopupEvents", model);
}

[HttpPost]
public ActionResult TAFPart3PopupEvents(string field2)         
{
    var model= (QuizzModelView )Session["Quiz"];

    // Fill in field2 here
    model.Field2 = field2;

}

编辑:用一些实际细节来解决布赖恩的评论 -

这种带有会话的方法比隐藏字段更不容易受到数据篡改的影响,如果这是一个问题的话。通过视图中的隐藏字段,恶意用户可以轻松覆盖以前的数据。根据模型的大小,隐藏字段也可能会使视图膨胀一点。

会话也有过期的缺点。这是处理过期的简单方法。如果这是通过 Ajax 调用的,那么您必须将错误消息传递回客户端而不是在那里进行处理。

[HttpPost]
public ActionResult TAFPart3PopupEvents(string field2)         
{
    var model= Session["Quiz"] as QuizzModelView;

    if (model == null)
    {
        // Add some kind of message here.
        // TempData is like Session, but only persists across one request.
        TempData["message"] = "Session Expired!";

        return RedirectToAction("Index");
    }

    // Fill in field2 here
    model.Field2 = field2;

    ....
}
于 2012-04-18T14:40:06.490 回答