2014-04-10 190 views
0

我有一個MVC佈局頁面(母版頁)與一些動態內容在頁眉和頁腳。Mvc佈局頁面動態內容

 <header> 

     @Html.Action("GetHeader", "Layout") 

    </header> 

    <div id="body"> 

      @RenderBody() 

    </div> 

    <footer> 
     @Html.Action("GetFooter", "Layout") 
    </footer> 

GetHeader和GetFooter動作方法獲得從數據庫中的值到一個對象,並返回基於該對象的頁眉/頁腳屬性局部視圖。

但事情是我不想對數據庫進行兩次調用,因爲它們都使用相同的對象類型。

有沒有什麼辦法讓我可以調用數據庫一次,並保留該對象,並通過佈局頁面使用它,而無需多次調用數據庫?

除了使用viewbag以外的任何解決方案都會非常有幫助。

謝謝!

回答

0

修改答案:

可以使用ViewBag,ViewData的,等等,在MVC可用,將數據從數據庫中存儲和使用它在你的MVC應用程序,而無需再次打電話給他們。

這個Link解釋他們,你可以根據你的要求使用它。

所有你需要做的就是將數據存儲在你的主要操作方法(默認索引)數據庫,

ViewData["Data"]=data; 

數據可以保存從數據庫中值的任何類型的對象。

在視圖頁面,您可以像

@Html.Action("ActionMethod", (ObjectTypeOfData)ViewData["Data"]) 

傳給其他的操作方法在你的操作方法,你可以把它作爲一個參數一樣,

public ActionResult ActionMethod(ObjectTypeOfData data){ .... your code ....} 

注意:如果你不這樣做想要在回發使用會話期間從數據庫中檢索數據而不是ViewData

0

使用此方法爲頭和footer.cshtml創建header.cshtml用於共享文件夾中的頁腳

然後,使用@ {Html.RenderPartial( 「頭」);}調用此.cshtml頁面到頁面佈局和@ {Html.RenderPartial( 「頁腳」);}

在header.cshtml和頁腳.cshtml使用sql查詢或linq查詢輸入動態值的頁面

1

使用靜態專用支持字段緩存靜態屬性中的值。在getter檢查後臺字段是否爲空。如果它爲空,則查詢數據庫並進行設置。讓該屬性返回後臺字段。

這應該在你的數據訪問層。這被稱爲單例模式。

1

我認爲一種好的方法是使用部分定義將部分渲染爲視圖輸出的一部分,然後使用「@RenderSection」方法將它們添加到佈局中。

<header> 
    @RenderSection("AdditionalHeader", required: false) 
</header> 
<div id="body"> 
    @RenderBody() 
</div> 
<footer> 
    @RenderSection(("AdditionalFooter", "Layout") 
</footer> 

然後在您的視圖中創建要呈現的部分:

@Section AdditionalHeader 
{ 
    <whatever content you want to generate from action> 
} 
@Section AdditionalFooter 
{ 
    <whatever content you want to generate from action> 
} 

這應該與MVC 3和前瞻性工作。如果您需要更多細節,Scott Guthrie做了更詳細的報道:

http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor