Asp.net-Mvc
有效避免 ASP.NET MVC 中的 ViewBag
您如何處理避免 ViewBag 的問題,因為它存在動態出錯的風險,但也避免每次都必須填充新的 ViewModel 並將其傳遞回視圖。例如,我不想更改以下內容以公開通常填充在 ViewBag 中的常見數據。
[HttpGet] void Index() { return View(); }至
[HttpGet] void Index() { var messages = new MessageCollection(); messages.AddError("Uh oh!"); return View(messages); }我將在管道中的哪個位置添加一個像 ViewBag 這樣的自定義且強類型的屬性,但它會優雅地暴露在 Controller 和 View 中。當我不需要特定的 ViewModel 時,我寧願這樣做……
[HttpGet] void Index() { Messages.AddError("Uh oh!"); return View(); }在視圖方面,而不是 @((IMessageCollection)ViewBag.Messages).Errors id 而是具有類似 @Messages.Errors 的東西,它是強類型的並且隨處可用。此外,我不想只是將它投射到我的 Razor 視圖頂部的程式碼塊中。
在 WebForms 中,我會做一些事情,比如把它作為一個基本頁面,然後有一個使用者控制項,可以根據需要在頁面上隱藏或顯示。控制器與視圖分離後,我不確定如何複製類似的行為。
這是可能的還是最好的設計方法是什麼?
謝謝,斯科特
Razor 視圖相當簡單。您與單個模型進行互動,該模型是強類型的。那麼,任何你想在視圖中強類型化的東西都需要在你的模型上。如果您的模型中有一些您不想要的東西或者是一次性的,那麼
ViewBag將作為所有非模型數據的通用包羅萬象提供,這就是為什麼它是動態的。強類型會限制它成為一個包羅萬象的能力。簡短而簡單:如果您想要強類型的消息添加到您的視圖模型。否則,堅持
ViewBag. 這些是你的選擇。