asp.net core系列 44 Web應用 佈局

来源:https://www.cnblogs.com/MrHSR/archive/2019/03/19/10552327.html
-Advertisement-
Play Games

一.概述 MVC的視圖與Razor頁面經常共用視覺和程式元素,通過使用佈局來完成,佈局還可減少重覆代碼。本章演示了以下內容的操作方法:(1)使用通用佈局,(2)自定義佈局,(3) 共用指令,(4)在呈現Razor頁面或MVC視圖之前運行通用代碼。 大多數 Web 應用都有一個通用佈局,可在頁面間切換 ...


一.概述

  MVC的視圖與Razor頁面經常共用視覺和程式元素,通過使用佈局來完成,佈局還可減少重覆代碼。本章演示了以下內容的操作方法:(1)使用通用佈局,(2)自定義佈局,(3) 共用指令,(4)在呈現Razor頁面或MVC視圖之前運行通用代碼。

  大多數 Web 應用都有一個通用佈局,可在頁面間切換時,為用戶提供一致體驗。 佈局通常包括應用頁頭、導航或菜單、頁腳等常見的用戶界面元素,還有經常使用script和css等常用的 HTML 結構。 所有這些共用元素均可在佈局文件中進行定義,在Content內容視圖中套用佈局來共用視覺和程式元素。

  

  1.1 預設佈局

    按照約定: ASP.NET Core 應用的預設佈局名為 _Layout.cshtml。 在vs中創建ASP.NET Core 項目使用模板的佈局文件如下所示:

    (1) Razor頁面的佈局:Pages/Shared/_Layout.cshtml

        

    (2) Mvc視圖的佈局: Views/Shared/_Layout.cshtml

        

    下麵的代碼是創建的項目模板,預設的_Layout的佈局文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
     @* viewport相容移動端 *@
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - StudyMVCDemo</title>

      @* 定義不同的環境載入不同的css文件 *@
        <environment include="Development">
            <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        </environment>
        <environment exclude="Development">
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"
                  asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
                  asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute"
                  crossorigin="anonymous"
                  integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE="/>
        </environment>
        <link rel="stylesheet" href="~/css/site.css" />
    </head>
    <body>

        @*頁頭區 定義頁面導航 *@
        <header>
            <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
                <div class="container">
                    <a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">StudyMVCDemo</a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse"
                aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> </ul> </div> </div> </nav> </header> @*內容區 調用RenderBody 來呈現內容視圖 *@ <div class="container"> @* GDPR(個人數據保護條例)協議的支持,關聯UseCookiePolicy*@ <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> @*頁腳區 *@ <footer class="border-top footer text-muted"> <div class="container"> &copy; 2019 - StudyMVCDemo - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </div> </footer> @* 定義不同的環境載入不同的js文件 *@ <environment include="Development"> <script src="~/lib/jquery/dist/jquery.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script> </environment> <environment exclude="Development"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" asp-fallback-src="~/lib/jquery/dist/jquery.min.js" asp-fallback-test="window.jQuery" crossorigin="anonymous" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="> </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js" asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js" asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal" crossorigin="anonymous" integrity="sha256-E/V4cWE4qvAeO5MOhjtGtqDzPndRO1LBk8lJ/PR7CA4="> </script> </environment> <script src="~/js/site.js" asp-append-version="true"></script> @* RenderSection是載入內容視圖中的js文件, Scripts是一個節點名稱。 例如:在Privacy.cshtml內容視圖中,需要載入一個1.js文件,下麵使用節點名稱Scripts。 @section Scripts { <script src="~/lib/jquery/dist/1.js"></script> } *@ @RenderSection("Scripts", required: false) </body> </html>

  

  1.2 自定義佈局

    上面的佈局_Layout是通過_ViewStart.cshtml 分部視圖來指定的。在應用程式中可以定義多個佈局,並且不同的視圖指定不同的佈局,下麵新建一個_MyLayout.cshtml佈局,在Privacy.cshtml視圖中應用佈局,代碼如下:

    (1) _MyLayout.cshtml佈局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - StudyMVCDemo</title>
    </head>
    <body>
        <header>
            <div style="height:50px; width:auto;  text-align:center; border:solid red 1px" >_MyLayout頁頭</div>
        </header>

        <div class="container">
            <partial name="_CookieConsentPartial" />
            <main role="main" class="pb-3">
                @RenderBody()
            </main>
        </div>

        <footer class="border-top footer text-muted">
            <div style="height:50px; width:auto;  text-align:center; border:solid red 1px">_MyLayout頁尾</div>
        </footer>

    </body>
    </html>

    (2) Privacy.cshtml視圖中應用佈局

@{
    ViewData["Title"] = "Privacy Policy";
    Layout = "_MyLayout";
}
<h1>@ViewData["Title"]</h1>

     Privacy頁面應用佈局後效果如下:

  1.3  共用指令_ViewImports.cshtml 

    MVC視圖和Razor頁面可以使用 Razor 指令來導入命名空間並使用依賴項註入。 由多個視圖共用的指令可以在通用 _ViewImports.cshtml 文件中進行指定。 _ViewImports 文件支持以下指令:

      @addTagHelper

      @removeTagHelper

      @tagHelperPrefix

      @using

      @model

      @inherits

      @inject

    _ViewImports.cshtml 文件可以放在任何文件夾中,在這種情況下,它只會應用於該文件夾及其子文件夾中的頁面或視圖。 可以在不同視圖目錄存放_ViewImports.cshtml 這樣文件夾級別覆蓋根級別指定的 _ViewImports 設置。預設是存放在根級別下(見圖1.1)。  新建項目預設引入的共用指令如下:

      @using StudyMVCDemo
      @using StudyMVCDemo.Models
      @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers    

    如果去掉using StudyMVCDemo.Models,在其它內容視圖頁引用實體時(比如:@model Movie),會生成時報錯。

    

   1.4 _ViewStart.cshtml

     需要在每個MVC視圖或Razor頁面之前,運行的代碼應放在_ViewStart.cshtml文件中。 在呈現每個完整視圖(不是佈局頁,也不是分部視圖頁)之前運行 _ViewStart.cshtml 中列出的語句。與_ViewImports.cshtml一樣也是分層結構。比如該頁預設指定的佈局是Layout 

    @{
        Layout = "_Layout";
    }

 

   參考文獻

    ASP.NET Core 中的佈局

    


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

-Advertisement-
Play Games
更多相關文章
  • 共有三種方法: 1.結合 vue-axios使用 首先在主入口文件main.js中引用 之後就可以在組件文件中的methods里去使用了 2. axios 改寫為 Vue 的原型屬性 首先在主入口文件main.js中引用,之後掛在vue的原型鏈上 在組件中使用 3.結合 Vuex的action 在v ...
  • chapter08 數組的擴展 8.1 擴展運算符 8.1.1 擴展運算符的含義 如同rest運算符的逆運算,將一個數組轉換為用逗號分隔的參數序列。 8.1.2 代替數組的apply方法 apply方法可以將數組轉為函數的參數 8.1.3 擴展運算符的應用 合併數組 與解構賦值相結合 註意:如果擴展 ...
  • 編碼規範 1. 縮進 採用2個空格縮進,而不是tab縮進。空格在編輯器中與字元是等寬的,而tab可能因編輯器的設置不同。2個空格會讓代碼看起來緊湊、明快。 2. 變數聲明 永遠用var聲明變數,不加var時會將其變為全局變數,這樣可能會意外污染上下文,或是被意外污染。在ECMAScript5的scr ...
  • 前言 本案列僅針對剛剛入門vue學習的伙伴,博主也是剛剛在學基於vue cli搭建腳手架項目,對於前端大牛,可以移步。 快速搭建vue cli環境 如何搭建基於vue cli項目,這裡不再敘述,如果不會的伙伴可以自己百度。 項目搭建完成後,基本文件目錄如下: 打開我們剛剛創建的my project文 ...
  • 背景,做一個前面圖片寬度固定,後面寬度自適應,使用到了flex佈局,但是想讓後面div里文字不換行,超出以點點表示時,這時佈局就亂了,查了下,原來flex佈局與white-space:nowrap有影響 解決辦法,父div設置min-width:0即可 w3c上面是這樣說的 By default, ...
  • 三點註意事項 "JS作用域傳送門" JS沒有塊級作用域,只有全局作用域和局部作用域(函數作用域)。 JS中的作用域鏈,內部的作用域可以訪問到外部作用域中的變數和方法,而外部作用域不能訪問內部作用域的變數和方法。 當前作用域沒有此變數或方法,會向外部作用域尋找變數或方法。 閉包的兩種使用場景 函數作為 ...
  • clip-path介紹 clip-path 直譯過來就是裁剪路徑,使用SVG或形狀定義一個HTML元素的可見區域的方法。想象一下你在Photoshop中勾勒路徑的場景。MDN上是這樣介紹 clip-path的: clip-path屬性可以防止部分元素通過定義的剪切區域來顯示,僅通過顯示的特殊區域。剪 ...
  • 1 繪製文本 fillText(string,x,y,maxWidth) //填充試繪製文本 strokeText(string,x,y,maxWidth) 畫線試繪製文本 設置字體樣式: context.font 文字的字體樣式 可選屬性: font-style 字體樣式 font-variant ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...