2016-02-17 128 views
0

我不知道我是否正確接近此。忽略@RenderBody()

我有一個asp.net mvc網絡應用程序。 有4個主要'頁面' 通過單擊菜單選項選擇一個頁面,並將該頁面選擇存儲在本地存儲器中。

現在,如果我做一個頁面刷新我寫了一個簡單的JS腳本,將維護當前查看的頁面。

但是,我已經注意到@RenderBody()在我的JS腳本之前被調用,所以主頁非常簡短地出現在所選頁面顯示之前。

所以,在須藤代碼我想這一點:

<div id="mainContent" style="height:423px; "> 
    if (pageselected!='HOME') 
    { 
     //call my JS script to load a partial view 
    } 
    else 
    { 
     //else load home page 
     @RenderBody() 
    } 
</div> 

有我有我的方法正確,我該怎麼O本的方式我描述?

回答

2

讓我們在這裏做一個重要的區別。當服務器呈現視圖時,服務器端運行RenderBody。在服務器完成渲染並將頁面發送回瀏覽器後,js將在客戶端上運行。所以它總是會在js之前運行RenderBody,並且無法改變它。因此你寫的僞代碼幾乎不可能實現。

也就是說,總有一些選項可以以其他方式獲得所需的功能。幾個選項包括:

  1. 決定在服務器端渲染什麼。例如,將這個頁面選擇存儲在會話中會是一個很大的開銷嗎?這也會給你一個額外的好處,不會發送不會顯示給用戶的HTML標記,這可以節省一些流量和一些瀏覽器渲染時間。

  2. 默認隱藏標記中的所有內容,就像做display: none一樣簡單,在你的js決定顯示什麼,並用js/jquery的一行顯示。在當前的代碼中實現起來可能更容易一些。

+0

感謝您對我的憐憫:)我喜歡您的選擇2.謝謝 –