2011-05-11 82 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