我偶然發現了這種情況,我在MVC控制器中設置了一個viewbag變量,但無法在母版頁內讀取它,viewbag變量在母版。如何在父母母版頁中讀取子頁面viewbag變量
我懷疑這是因爲主頁是在頁面控制器調用之前呈現的,但仍然需要以某種方式向後通信。
我偶然發現了這種情況,我在MVC控制器中設置了一個viewbag變量,但無法在母版頁內讀取它,viewbag變量在母版。如何在父母母版頁中讀取子頁面viewbag變量
我懷疑這是因爲主頁是在頁面控制器調用之前呈現的,但仍然需要以某種方式向後通信。
我100%的@Chase Florell同意,但回答你直接的問題,我相信你可以只使用ViewContext.Viewbag
事實證明,我在一個從未命中的IF語句中設置Viewbag.x變量。在IF之外移動Viewbag.x = true可以解決問題。沒有必要使用ViewContext,因爲Viewbag.x就足夠了。 – user1615362
在部分視圖中,我相信你必須使用Controller.ViewContext.ViewBag(「MyBag」) – RichC
沒有進一步的信息到您的業務邏輯,我可以在這裏的基礎......但是......似乎在視圖中設置任何ViewBag數據是一個Anti-Pattern。
當View由於它是頁面生命週期的一部分而呈現時,您的ViewModel
應該擁有它所需的所有內容,並且View和Masterpage應該只是使用數據,而不會生成它。
我也是一個FIRM信徒設置ViewModel
相關的一切視圖,而不是ViewBag(這是個人偏好,但被廣泛接受)。
如果您進一步描述您的具體情況,也許我可以幫助您想出一個更好的模式。
public class LayoutViewModel
{
public bool UseFacebookConnect { get; set; }
}
public class SomeViewModel : LayoutViewModel
{
public string SomeData { get; set; }
}
public class SomeController : Controller
{
public ActionResult Index()
{
var someViewModel = new SomeViewModel
{
SomeData = "",
UseFacebookConnect = true
};
return View(someViewModel);
}
我有一個FaceBook在母版頁內連接JavaScript代碼,但我需要將它隱藏在一些不需要社交功能的頁面上。 – user1615362
所以在ViewBag中傳遞一個布爾值。 'ViewBag [「useFacebookConnect」] = false;'來自Controller ...而不是來自視圖。我會把邏輯放在'ActionFilter'中以保持你的代碼[DRY](http://en.wikipedia.org/wiki/Don't_repeat_yourself)。 –
您可能需要** [ TempData的](http://stackoverflow.com/a/17199709/2015869)**。 –
不使用'ViewBag'的原因是,當您到達佈局頁面時,它會從我的查看請求重定向,這意味着第二個請求。 –