2012-09-03 67 views
0

我有一個MVC4控制器多次調用其視圖,每次都有一組不同的ViewBag。堅持MVC4控制器的數據通過多個後發

@using (Html.BeginForm()) 
{ 
    @if (ViewBag.Foo1 != null) 
    { 
     @Html.DropDownList("Bar1",.... 
    } 

    @if (ViewBag.Foo2 != null) 
    { 
     @Html.DropDownList("Bar2",.... 
    } 

    <input name="ActionButton" type="submit" value="Ok"" /> 
} 

每次用戶點擊提交按鈕,控制器檢查,看看有什麼是收集和品牌在:認爲通過像這樣生成一個表單,基於缺乏或那些ViewBags存在的內容一組新的ViewBags的再次調用視圖,有點像在此之前:

public ActionResult Create() 
{ 
    ViewBag.Foo1 = "blawblaw"; 
    return View(); 
} 

[HttpPost] 
public ActionResult Create(FormCollection collection) 
{ 
    if (collection["Bar1"] != null) 
    { 
     string FirstPass = collection["Bar1"]; 
     ViewBag.Foo2 = "blawblaw"; 
    } 

    if (collection["Bar2"] != null) 
    { 
     string SecondPass = collection["Bar2"]; 
     ViewBag.Foo3 = "blawblaw"; 
    } 

    return View(); 
} 

我現在需要做的是某種程度上已分別通過THU控制器「記住」講講以前的通行證。也就是說,在我的例子中,第二遍通過控制器(集合[「Bar2」]爲true的那個),FirstPass的值爲空。

我該怎麼做?

+0

聽起來像你試圖重新使用MVC的WebForm,這是不正確的路要走。 MVC應該是無狀態的 - 它不會記住任何關於用戶已經發布的內容,除非你將這些數據保存在某個地方(數據庫)。您應該查看模型綁定,而不是使用viewbag,也使用不同的控制器。不要試圖通過相同的網址強制所有內容,否則你可能會陷入[此陷阱](http://37signals.com/svn/posts/2316-so-much-complexity-in-software-comes-from) 。 – Nick

+0

我明白...但這個應用程序的90%是直線MVC CRUD功能和MVC是一個很好的適合那裏。然而,在這一頁上,我需要通過幾個步驟來吸引用戶,然後才能更新模型。 – davecove

回答

0

在這種情況下,看看在MVC中實現嚮導的最佳實踐。一些good suggestions here。就我個人而言,我仍然會考慮使用單獨和不同的網址。另外,如果在解決方案中擁有數據庫訪問權限,那麼在更新主模型之前,仍然可以存儲臨時數據。想想你想要發生什麼,如果用戶沒有完成整個旅程的第一輪...

相關問題