ASP.NET Core 2.0 : 四. _Layout與_ViewStart

来源:https://www.cnblogs.com/FlyLolo/archive/2018/02/18/8452169.html
-Advertisement-
Play Games

本章我們新建一個項目,並通過這個項目熟悉一下_Layout與_ViewStart以及它們的載入順序. 新建一個項目 首先, 文件->新建一個解決方案 選擇.Net Core 的APP下麵的ASP.NET Core Web App(MVC) Next 設置解決方案的名稱(和Xcode的界面風格有點像) ...


本章我們新建一個項目,並通過這個項目熟悉一下_Layout與_ViewStart以及它們的載入順序.

新建一個項目

首先, 文件->新建一個解決方案

選擇.Net Core 的APP下麵的ASP.NET Core Web App(MVC)

Next

 

設置解決方案的名稱(和Xcode的界面風格有點像), 輸入FL.WeightManager, 做一個每天記錄體重的應用

點擊Create.

項目新建完畢, 項目的文件結構上一章已經說過了.

 

_layout的應用

新建好的項目預設運行效果如下圖

頁面主要分三部分, 上面的header, 下麵的footer, 點擊上面菜單總的Home、About和Contact切換一下頁面看一下

這兩部分都是不變的, 只有中間部分在變.

打開Shared文件夾下麵的_layout.cshtml頁面看一下, header和footer都是定義在這裡的, 

而中間變的部分是 @RenderBody().也就是我們經常要改變的地方了.

現在將主頁改變一下, 打開Home文件夾下的Index文件,將裡面的一大堆代碼改成如下代碼

 

 1 @{
 2     ViewData["Title"] = "主頁";
 3 }
 4 <table class="table table-hover">
 5     <thead>
 6         <tr>
 7             <th>序號</th>
 8             <th>日期</th>
 9             <th>體重</th>
10             <th>備註</th>
11         </tr>
12     </thead>
13     <tbody>
14         <tr>
15             <td>1</td>
16             <td>2018-02-15</td>
17             <td>66.6</td>
18             <td>除夕,胖了</td>
19         </tr>
20         <tr>
21             <td>2</td>
22             <td>2018-02-16</td>
23             <td>68.8</td>
24             <td>春節,又重了</td>
25         </tr>
26     </tbody>
27 </table> 

刷新一下頁面

看起來效果還不錯, 可能會註意到, 這個table有個class  <table class="table table-hover"> ,

這個class定義在哪裡呢.

再次打開_layout文件, 可以看到裡面在Development環境下引用了bootstrap的css

    <environment include="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>

所以可以把一些"通用"的css和js的引用放在layout文件里, 避免重覆寫這些引用.

順便把header和footer中顯示的項目名稱改一下, 然後分別打開Index和About這些頁面, Header和Footer都統一改變了.

如下圖的About頁面.

 

但是我們在這個Index頁中沒有對這個模板做引用, 是通過什麼方式引用的呢?

_ViewStart的應用

回顧修改後的Index頁面, 我們並沒有寫 Layout = "_Layout" 這樣的代碼, 這是因為已經在_ViewStart中預設設置了

_ViewStart中只有這一句

@{
    Layout = "_Layout";
}

如果我們在Index頁面中添加一句 Layout=null 如下,

@{
    Layout=null;
    ViewData["Title"] = "主頁";
}

再次刷新頁面, 樣子變成了這樣

Header和Footer以及Table的樣式全都沒有了, 是因為這些本來都寫在_Layout中, 現在失去了對_Layout的引用, 這些也就消失了.

總結: _ViewStart對模板頁做了預設的設置, 除非顯示的寫明Layout=XXX, 否則會採用_ViewStart中的設置.

       所以未做設置和設置 Layout = "_Layout" 的效果是一樣的.

 

 _ViewStart、_Layout和Index(實際頁面)的載入順序

 載入順序是: _ViewStart =>Index=>_Layout.

1._ViewStart在所有View載入之前載入, 設置了預設的模板頁.

2.接著由Controller指定的頁面查找Index.cshtml載入, 並讀取該頁面的Layout設置. 

3.根據Index頁面的Layout設置的模板頁查找對應的模板頁載入.

將_ViewStart中的 Layout = "_Layout" 改為 Layout = "_Layout1" , 再次運行, 頁面會出現如下找不到模板的錯誤.

An unhandled exception occurred while processing the request.

InvalidOperationException: The layout view '_Layout1' could not be located. The following locations were searched:
/Views/Home/_Layout1.cshtml
/Views/Shared/_Layout1.cshtml
Microsoft.AspNetCore.Mvc.Razor.RazorView.GetLayoutPage(ViewContext context, string executingFilePath, string layoutPath)

View的查找規則: 先查找Controller對應的文件夾(這裡是Home), 若未找到則到Shared文件夾查找, 若最終未找到則提示錯誤.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原理 選定填充圖片的ASCII字元,不同的字元對應於不同的灰度 讀取圖片並計算各像素灰度值(同時考慮透明背景),用相應的的ASCII字元替換該像素 程式功能 支持3種文件選擇方式:選定文件(支持圖片預覽),添加文件夾,拖入文件 支持5種圖片格式:.jpg, .jpeg, .gif, .png,.bm ...
  • 之前在使用Altera的三速乙太網MAC IP的基礎上,完成了UDP協議數據傳輸。此次為了將設計移植到xilinx FPGA上,需要用到xilinx的三速乙太網MAC IP核,當然也可以自己用HDL編寫,但必須對數據鏈路層協議有非常清晰的認識。以下是在使用xilinx 三速乙太網MAC過程中的一些記 ...
  • 線程(下) 7.同步鎖 這個例子很經典,實話說,這個例子我是直接照搬前輩的,並不是原創,不過真的也很有意思,請看: 這段代碼的意思是,用一百個線程去減1,以此讓變數number為100的變為0 結果: 那麼我稍微的改下代碼看看: 並沒有很大的改變對吧,只是加了一個臨時變數,並且中途停頓了0.2s而已 ...
  • 在控制器方法的頭部添加 [ValidateInput(false)] 如果向mvc服務端提交帶html標簽的內容就會導致校驗失敗異常,從而得不到想要的結果,關閉的方法是在相應方法頭部添加 [ValidateInput(false)]屬性。 如: ...
  • 本文是利用ZXing.Net在WinForm中生成條形碼,二維碼的小例子,僅供學習分享使用。 ...
  • C# 8 打算引入 Nullable Reference Types,這表示往後所有的參考型別預設都是不可為 null;對於可為 null 的參考型別變數,寫法跟可為 null 的實質型別一樣,宣告時必須在型別後面加上 "?" 字元。在這篇筆記中,我試著把我理解的部分整理出來。 ...
  • ScottGu在其最新的博文中推薦了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,該文章為我們簡單介紹了ASP.NET MVC中的13個擴展點。Keyvan Nayyeri(與Simone合著了Begi ...
  • 很多同學都讀過這篇文章吧 ASP.NET MVC中你必須知道的13個擴展點,今天給大家介紹一個ASP.NET MVC的擴展庫,主要就是針對這些擴展點進行。這個項目的核心是IOC容器,包括Ninject, StructureMap, Unity ,Windsor和Autofac。如果你和我一樣喜歡使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...