後如何訪問從不同的充局部視圖數據我有3個partialviews 3周的ViewModels頁:POST
- 帳戶列表
- 模式彈出(你可以在這裏修改多個賬戶)
- 搜索面板
我想刷新1.後在2上進行POST。這很簡單,但如果我想保留使用搜索麪板後得到的結果呢?
我可以用2種方法做到這一點,但兩者都不好(糾正我,如果我錯了)。
首先(我選擇和工作的一個)是在TempData中存儲3.中使用的viewmodel。我做搜索(POST)並保存TempData傳遞的視圖模型。然後,無論何時在不同的partialview上進行POST,我都可以刷新1.使用TempData中的數據(搜索參數)。
private const string SearchDataKey = "SearchData";
[HttpGet]
public PartialViewResult RefreshData()
{
if (TempData[SearchDataKey] != null)
return PartialView("AccountListView", PrepareAccountListViewModelForSearchData(TempData[SearchDataKey] as AccountSearchViewModel));
else
return PartialView("AccountListView", PrepareAccountListViewModel());
}
和保存視圖模型:
public PartialViewResult Search(AccountSearchViewModel searchParameters)
{
...
TempData[SearchDataKey] = searchParameters;
return PartialView("AccountListView", databaseAccountListViewModel);}
第二種方法是POST始終與所有3周的ViewModels 「大」 視圖模型。這樣我就可以從Search的視圖模型獲取數據,但是我會發送許多不需要的信息,而不是隻需要調用過程的Modal Popup的viewmodel。
我問過很少有MVC經驗的人,他們說他們從來不需要在TempData中存儲視圖模型,但它似乎比擁有1個Big表單並在每個POST中傳遞所有內容更合理。
你知道任何更好的方法來處理這個或哪一個是正確的嗎?
PS。話題有「最佳實踐」但被刪除了警告信息的原因。我希望詢問有關意見仍然被允許。
PS2。我的大多數POST &在初始加載後通過Ajax進行GET。
詢問意見是無關緊要的。並聽取你更有經驗的同事(運行你的應用程序,並打F5刷新瀏覽器,以瞭解爲什麼你不應該使用'TempData' - 它只能持續一個請求) –
@StephenMuecke,在這種特殊情況下,F5不是一個問題原因之後我寧願加載默認數據。另外,如果我選擇第二種方法並POST一切,那麼我相信在F5之後我仍然會丟失數據(因爲我將重定向到GET休耕後重定向 - 獲取模式)?因此,有一點改變問題,是否有任何錯誤,保持每頁1個表單,並在每個POST中傳遞1個大視圖模型(使用部分視圖的視圖模型) – Kostrzak