2015-05-01 15 views
1

所以我在我的_Layout.cshtml文件中有一個搜索欄,它需要能夠過濾的所有類別的列表。同一視圖在多個視圖中的值

的問題是,我把我的類別列表視圖中的包和必須做的

List<categories> categories = db.categories.ToList(); 
ViewBag.categories = categories; 

,即使在那些將沒有使用這個列表中的每個視圖。

任何解決方案?

回答

3

有點不清楚你想要解決什麼問題,但是如果_Layout.cshtml需要你需要從每個控制器傳遞它的值,或者因爲ViewBag是空的,你在運行時會冒異常。

一種解決方案是創建基類控制器並覆蓋OnResultExecuting方法。

public class BaseController : Controller 
{ 
    protected override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     // In case you're doing any AJAX calls there's no sense in 
     // incurring the overhead of filling the ViewBag. 
     if(!Request.IsAjaxRequest) 
     { 
      List<categories> categories = db.categories.ToList(); 
      ViewBag.categories = categories; 
      base.OnResultExecuting(filterContext); 
     } 
    } 
} 

現在只要確保您的應用程序中的每個控制器都繼承自BaseController

2

如果你想傳遞來自多個控制器的數據,爲什麼不使用會話?

會議

會議是堅持數據,直到當前會話存活的方式。如果我們需要從多個控制器,操作和視圖訪問某些數據,則會話是存儲和檢索數據的方式 •會話數據永不過期。

實例下面

public class CustomerController : Controller 
{ 
    public ActionResult Index() 
    { 
     Customer Obj = new Customer(); 

     Obj.Name = "Sourav "; 

     Obj.Surname = "Kayal"; 

     Session["Customer"] = Obj; 
     return View(); 
    } 

} 
} 

Create a view to display data 

由於我們使用MVC3申請中所述,我們允許創建Razor視圖。創建一個像下面這樣的剃鬚刀視圖來訪問會話數據。

@{ 
Layout = null; 

}

<!DOCTYPE html> 

<html> 
<head> 
<title>Index</title> 
</head> 
<body> 
<div> 
    @{ 
     var CustomerInfo = (MVC3.Models.Customer) Session["Customer"]; 
    } 

    Customer Name is :- @CustomerInfo.Name; 
    <br /> 

    Customer Surname is :[email protected]; 
</div> 

+0

你真的不應該從View中訪問'Session'。如果您試圖避免每次全局緩存機制比在每個用戶的會話中爲完全相同的數據集佔用內存更有意義時檢索數據的開銷。 –

0

確定這裏就是我如何得到它周圍:

我爲這部分單獨的控制器方法和觀點,並呼籲@Html.Action("SearchBar", "Home")放即在_Layout.cshtml文件中。

每次'section'被渲染時,其控制器方法被調用並且數據被獲取。

相關問題