2012-06-26 68 views
0

我有一種情況,我必須從用戶那裏獲得輸入(表單)。顯示繼續按鈕之後按下下一個查看頁面。但在繼續按下後,我不想將模型存儲在數據庫中。我必須根據用戶提供的輸入顯示一些細節(組合一些表格),然後再從用戶那裏獲取一些數據。只有這樣我才能將模型存儲在相應的表中。 我該如何執行此操作?我嘗試從用戶獲取Model並傳遞給生成下一頁的函數。這是做到這一點的方法嗎?或者有其他方法?.NET MVC3/Holding temp model

回答

1

將第一個表單提交的模型存儲在session中。

[HttpPost] 
public ActionResult ContinueForm1(Model1 model1) 
{ 
    if(ModelState.IsValid) 
    { 
     Session["Model1"] = model1; 

     return View("Form2"); 
    } 

    return View(); 
} 

[HttpPost] 
public ActionResult ContinueForm2(Model2 model2) 
{ 
    if(ModelState.IsValid) 
    { 
     ... model2 is already here, get the model1 from session 
     ... and save to datatbase finally return a different view or redirect to some 
     ... other action 
    } 

    return View(); 
} 
0

你正走向正確的軌道。

您需要抓取從第一個視圖返回的模型 - 最好是在這裏使用ViewModels,而不是直接綁定到您的db模型。看看http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/Why should I use view models?至於爲什麼這些都是好東西。

最簡單的方法是將模型作爲參數傳遞給您的方法,例如

假設您的視圖使用相同的ViewModel(可能會也可能不會),那麼您可以直接將視圖模型發送到您的新視圖 - 否則您可以將這些元素複製到新的視圖模型中併發送該視圖。

例如

[HttpPost] 
public ViewResult Step1(MyViewModel viewModel) 
{ 
    //Do some validation here perhaps 
    MySecondViewModel secondViewModel = new MySecondViewModel{ 
         Id = viewModel.Id, 
         // etc. etc. 
       }; 
return View("Step2", secondViewModel); 
} 

然後,您可以繼續進行,直到您必須堅持實體到數據庫。 注意,只要視圖強制輸入到ViewModel,您不需要在表單中做任何特殊的事情就可以將模型作爲參數發佈。