2011-05-11 85 views
0

我有一个窗体在视图上使用Html.BeginForm()。我在控制器中有一个ActionResult来处理帖子。我需要的是将结果反馈给观察者。我可以启动新的视图,但我不知道如何将数据传递给它,并且一旦我不知道如何显示它。这就是我在ActionResult中所拥有的。使用ASP.NET MVC显示FormCollection

[HttpPost] 
     public ActionResult Index(FormCollection collection) 
     { 


      ViewBag.Title = "Confirm your order"; 
      return View("OrderConfirmation", collection); 
     } 

如果我只是做一个返回View(“OrderConfirmation”);它会去看法,所以我知道我得到了这个工作。我只是不知道如何传递数据。现在我强烈地将其输入到相同的模型中,导致错误的形式是因为这个FormCollection显然不同。如果我删除强类型的行上面的作品,但我不知道如何在该点循环收集。

感谢您的帮助。

回答

2

使用ViewModel和一个非常类型的视图。然后,您可以将模型传递到第二个视图。

public ActionResult Index(Order order) 
{ 
    return View("OrderConfirmation", order); 
} 

ASP.NET MVC将自动创建一个订单实例,并从发布的FormCollection中填充属性。

+0

把你的意见和下面的答案。虽然仍然有问题。请在下面查看我的回复。 – Twisted 2011-05-11 07:20:36

+0

你正在谈论一个foreach循环。我不知道你想传递给视图的数据结构。如果你想迭代数据,你必须在你的模型中有一个集合。也许你应该澄清你的问题。 – slfan 2011-05-11 08:22:50

2

首先不要使用FormsCollection,它的泛型。如果您需要单元测试并访问UpdateModel(),则只需要它。

绑定到一个模型类型或绑定到PARAMS:

 
public ActionResult Index(SomeModel model) 
{ 
    return View("OrderConfirmation", model); 
} 
在顶部视图

 
public ActionResult Index(int key) 
{ 
    SomeModel model = new SomeModel(); 
    UpdateModel(model); 
    return View("OrderConfirmation", model); 
} 

指定

@model MyAppNameSpace.ViewModels.SomeModel
+0

我已经按照你在第一例中所说的完成了。我删除了视图中的IEnumerable部分,使其看起来像您的示例。它没有在那里工作。它现在可以工作,但是当它碰到foreach循环时,它会死“...不包含'GetEnumerator'的公共定义” – Twisted 2011-05-11 07:19:58

+0

更改您的foreach以在Model.WhateverPropertyIsYourCollection上运行(在此处猜测而不看到您的代码) – 2011-05-11 18:41:40