zoukankan      html  css  js  c++  java
  • ASP.NET MVC3 在_ViewStart设置Layout使用RenderAction的注意事項

    来源:https://dotblogs.com.tw/lastsecret/archive/2012/03/26/71052.aspx

    ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項

    ASP.NET MVC3 _ViewStart設定Layout後用RenderAction的注意事項

    3/24 TW MVC第一次活動圓滿的結束了,雖然是RC,但也來了不少願意聽我們分享的好朋友。

    社群最大的好處就是分享以及回饋,當天有朋友提了一些問題,我們會蒐集起來利用每週四聚會

    或是平日的時間一一回覆的。

    回到主題,在MVC3中,Views資料夾下的_ViewStart.cshtml是可以設定預設的Layout的,

    在MVC3預設專案中,_ViewStart.cshtml會長這樣

    @{
            Layout = "~/Views/Shared/_Layout.cshtml";
    }

    也就是說,凡是有在頁面上沒有特別指定Layout的話,就會預設使用此設定。

    一般來說是滿方便的,但有時太方便也是會出一點小狀況

    在頁面上,會呼叫 Html.Action 或 Html.RenderAction (兩者只是回傳方式不同而已)

    指定Controller及Action並返回指定的頁面,而在Controller內要return View時,

    若是用ViewResult返回,而頁面上又沒特別指定Layout的話,就會造成Layout被重複載入;

    若是此Html.Action是在Layout上呼叫, 部分页中会再次显示Layout中的内容

    如上圖,呼叫的地方重覆的載入了Layout。

    此種情況最常發生在呼叫 Html.Action 或是利用Ajax呼叫某個Controller與Action後返回頁面時,容易疏忽

    了頁面會預設使用_ViewStart中預設的Layout。

    解決辦法大概有下列幾種:

    • 在 Action return 時,使用return PartialView();  PartialViewResult是不會載入Layout的。

           public ActionResult ThisPatial()
           {
                    //return View();
                    return PartialView();
              }

    image

    • 在ChildAction 回傳的View中,明確的指定這個頁面的Layout為null或是空字串。

        @{
          Layout = null;
        }

    image

    • 不要在_ViewStart中指定Layout,但這應該是下下策了。可視情況使用此方法。

    另外補一點小知識,例如_ViewStart或是_Layout都會使用"_"當作前綴字,這是因為不希望以此方式命名

    文件被直接的訪問,因此只要是"_"開頭的,被直接瀏覽時就會出現以下錯誤

    image

    另外還有一點就是,_ViewStart.cshtml的找尋規則跟Web.config有點類似,會先從離目標文件同層的

    資料夾開始找,如果沒有的話再繼續到父資料夾找。因此實際上是可以配置很多個_ViewStart在不同

    的資料夾內的。

  • 相关阅读:
    DALSA线阵相机调焦、平场校正、行频微调
    千兆网卡、万兆网卡设置
    【转载】.h头文件 .lib库文件 .dll动态库文件之间的关系,静态编译、动态编译
    【转载】工控机插槽
    镜头的选择
    相机SDK流程
    光栅尺触发DALSA线阵相机
    Go语言备忘录(3):net/http包的使用模式和源码解析
    Go语言备忘录(2):反射的原理与使用详解
    Go语言备忘录(1):基本数据结构
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/9207589.html
Copyright © 2011-2022 走看看