NET Core-學習筆記(四)

来源:http://www.cnblogs.com/wangrudong003/archive/2016/07/26/5709257.html
-Advertisement-
Play Games

經過前面分享的三篇netcore心得再加上本篇分享的知識,netcore大部分常用知識應該差不多了,接下來將不會按照章節整合一起分享,因為涉及到的東西整合到一起篇幅太大了,所以後面分享將會按照某一個知識點分解,還請各位勿噴;本章要分享的信息如下: . Partial Views使用的簡單例子 . 註 ...


經過前面分享的三篇netcore心得再加上本篇分享的知識,netcore大部分常用知識應該差不多了,接下來將不會按照章節整合一起分享,因為涉及到的東西整合到一起篇幅太大了,所以後面分享將會按照某一個知識點分解,還請各位勿噴;本章要分享的信息如下:

. Partial Views使用的簡單例子

. 註入服務到View中

. Controller輸出數據方法和Filters Attribute的貼圖

. IOptions<T>註入自定義讀取的配置文件數據信息服務

 

下麵一步一個腳印的來分享:

. Partial Views使用的簡單例子

首先,這個局部視圖Partial Views在實際項目中用途很多很廣,其實這個和前面mvc版本的用法差不多,這裡簡單舉例怎麼傳遞參數和非同步佈局的用法;咋們先在Shared文件夾中創建一個視圖名稱為_ShowListLi.cshtml,然後刪除裡面的所有代碼(也就是變成空白的模板),再簡單在裡面寫入代碼:

1 <li>@Model</li>
View Code

挺簡單的哈哈@Model對應的就是傳遞過來的參數,然後咋們創建個Controller對應返回一些列表數據這裡我使用前面章節現成的ArticlesController對應的代碼:

 1 public async Task<IActionResult> Index( int id = 1)
 2         {
 3 
 4             var artiles = _context.Article;
 5             var pageOption = new MoPagerOption
 6             {
 7                 CurrentPage = id,
 8                 PageSize = 2,
 9                 Total = await artiles.CountAsync(),
10                 RouteUrl = "/Articles/Index"
11             };
12 
13             //分頁參數
14             ViewBag.PagerOption = pageOption;
15 
16             ViewBag.Plugin = _plugins.Value;
17 
18             //數據
19             return View(await artiles.OrderByDescending(b => b.CreateTime).Skip((pageOption.CurrentPage - 1) * pageOption.PageSize).Take(pageOption.PageSize).ToListAsync());
20         }
View Code

可以不用關心上面的這個Controller代碼,因為是前面已經講過的,然後在對應的View中寫入如下代碼:

1 <ul>
2     @foreach (var item in Model)
3     {
4         @await Html.PartialAsync("_ShowListLi", item.Title)
5     }
6 </ul>
View Code

運行的效果展示出了對應Title的數據如圖:

PartialAsync是一種調用局部佈局試圖的方法,兩個參數,第一個是局部試圖文件的名稱這裡是_ShowListLi,第二個參數是要傳遞給引入的局部試圖的參數這裡我使用列表數據中的Title;因為這是個非同步方法前面按照慣例需要await修飾代碼就是這些,需要註意的是第一個參數如果局部試圖文件是在項目中的不同文件夾中引用的路徑不相同,這裡給出一段官網的代碼加上翻譯的文字說明(不要太在意譯文的準確性):

//使用當前對應文件夾中名稱為ViewName文件的佈局試圖
//如果同級文件夾中不存在ViewName那麼去項目中的Shared文件夾中查找佈局視圖
@Html.Partial("ViewName")

//如果是完整的佈局視圖名稱加尾碼如:ViewName.cshtml"),那麼只能查找使用佈局視圖文件所在的對應文件夾中是否存在本試圖
@Html.Partial("ViewName.cshtml")

//從項目根目錄查找佈局視圖
@Html.Partial("~/Views/Folder/ViewName.cshtml")
@Html.Partial("/Views/Folder/ViewName.cshtml")

//使用相對路徑查找試圖文件
@Html.Partial("../Account/LoginPartial.cshtml")

 

. 註入服務到View中

首先,咋們定義一個服務類PublicClass和一個截取字元串方法_SubStrByLen,如下代碼:

 1  public class PublicClass
 2     {
 3 
 4         public string _SubStrByLen(string org, int len = 50, string endStr = "...")
 5         {
 6 
 7             try
 8             {
 9                 if (string.IsNullOrEmpty(org)) { return org; }
10 
11                 //var gb = System.Text.Encoding.UTF8.GetBytes(org);
12                 //var tLen = gb.Length;
13 
14                 org = org.Trim();
15                 var tLen = org.Length;
16                 return tLen > len ? (org.Substring(0, len) + endStr) : org;
17             }
18             catch (Exception ex)
19             {
20 
21                 throw new Exception(ex.Message);
22             }
23         }
24     }
View Code

然後,在文件Startup.cs中的ConfigureServices方法中使用AddTransient添加註入:

1 //註入依賴
2             services.AddTransient<Extend.PublicClass>();
View Code

此時註入完成,然後在試圖中使用,這裡咋們在上面創建的局部試圖_ShowListLi.cshtml文件中使用如下代碼:

1 @inject Text.Core.Extend.PublicClass PTool
2 
3 <li>@Model</li>
4 <li>@PTool._SubStrByLen(Model,10,".....")</li>
View Code

試圖中使用@inject引入被註入的服務(引入的格式如:@inject <type> <name>),然後使用_SubStrByLen來截取咋們的數據長度,效果如下圖:

咋們再繼續增加一個靜態方法來對比下,方法和上面截圖字元串的服務是一樣的,如代碼:

 1 public class PublicClassStatic
 2     {
 3 
 4         public static string _SubStrByLen(string org, int len = 50, string endStr = "...")
 5         {
 6 
 7             try
 8             {
 9                 if (string.IsNullOrEmpty(org)) { return org; }
10 
11                 //var gb = System.Text.Encoding.UTF8.GetBytes(org);
12                 //var tLen = gb.Length;
13 
14                 org = org.Trim();
15                 var tLen = org.Length;
16                 return tLen > len ? (org.Substring(0, len) + endStr) : org;
17             }
18             catch (Exception ex)
19             {
20 
21                 throw new Exception(ex.Message);
22             }
23         }
24 
25     }
View Code

因為是靜態方法,所以可以直接在試圖中使用如:

咋們再來看下運行的效果:

可以看出效果是一樣的,就寫代碼速度上來將後者更快些,當然註入服務的方式在頁面使用也不無道理因為不可能所有的服務方法都弄成靜態的吧,這裡的列子只是簡單的截取字元串的效果

 

. Controller輸出數據方法和Filters Attribute的貼圖

這點主要是截圖Controller裡面Action對應的返回數據的方法:

對應的官網地址:https://docs.asp.net/en/latest/mvc/controllers/actions.html

Filters Attribute的貼圖:

對應官網地址:https://docs.asp.net/en/latest/mvc/controllers/filters.html

這兩個知識點會在後面的不斷擴展,歡迎繼續關註

 

. IOptions<T>註入自定義讀取的配置文件數據信息服務

首先,咋們創建一個配置文件Plugin.json,內容數據如:

{
  "Plugins": [

    {
      "Plugin": {

        "Module": "API",
        "Des": "this is API"
      }
    },
    {
      "Plugin": {

        "Module": "MVC",
        "Des": "this is MVC"
      }
    }
  ]
}
View Code

再創建一個對應數據格式的實體類:

 public class Plugin
    {

        public string Module { get; set; }
        public string Des { get; set; }
    }
View Code

好咋們來讀取這個配置文件信息到實體對象中,還記得前面幾篇有講到怎麼獲取配置文件數據麽,這裡我們使用ConfigurationBuilder讀取配置文件,因為起始文件Startup.cs文件中有載入配置文件的操作,所以我們直接在它的構造函數這裡添加載入我們剛剛添加的配置文件如下代碼:

1 var builder = new ConfigurationBuilder()
2 
3                 //env.ContentRootPath:獲取當前項目的跟路徑
4                 .SetBasePath(env.ContentRootPath)
5                 //使用AddJsonFile方法把項目中的appsettings.json配置文件載入進來,後面的reloadOnChange顧名思義就是文件如果改動就重新載入
6                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
7                 //這裡關註的是$"{param}"的這種寫法,有點類似於string.Format()
8                 .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
9                 .AddJsonFile("Plugin.json", optional: true, reloadOnChange: true);
View Code

是的使用AddJsonFile方法直接添加我們要讀取的配置文件名稱,這樣在實例對象ConfigurationBuilder調用Build()方法之後配置文件就載入到程式中了,再賦值給了屬性Configuration,此屬性在方法ConfigureServices()可以直接使用,因為配置文件中是一個數組json所以轉到程式中是集合對象,所以有瞭如下代碼:

 foreach (var item in Configuration.GetSection("Plugins").GetChildren())
                {

                    var plugin = new Plugin();

                    plugin.Module = item.GetSection("Plugin:Module").Value;
                    plugin.Des = item.GetSection("Plugin:Des").Value;
                   
                }
View Code

這裡迴圈中每次創建了Plugin對象並賦值了,但是沒有集合來保存這些對象數據,這裡就要講到用IOptions<T>註入這些數據到Controller中去,註入關鍵代碼:

 1 services.AddOptions();
 2 
 3             //初始化參數信息
 4             services.Configure<List<Plugin>>(b =>
 5             {
 6 
 7                 foreach (var item in Configuration.GetSection("Plugins").GetChildren())
 8                 {
 9 
10                     var plugin = new Plugin();
11 
12                     plugin.Module = item.GetSection("Plugin:Module").Value;
13                     plugin.Des = item.GetSection("Plugin:Des").Value;
14                     b.Add(plugin);
15                 }
16             });
View Code

仔細看下這裡註入的數據類型是List<Plugin>,這樣就匹配配置文件對應的json數組了;

然後咋們去Controller中代碼如圖:

然後通過_plugins.Value這樣就能得到註入進來的配置文件數據了,咋們再通過ViewBag.Plugin = _plugins.Value保存數據展示到試圖中代碼如:

<table class="table">

    <tbody>
        @foreach (var item in ViewBag.Plugin as List<Plugin>)
        {
            <tr>
                <td>
                    @item.Module
                </td>
                <td>
                    @item.Des
                </td>
            </tr>
        }
    </tbody>
</table>
View Code

dotnet run能看到如下截圖效果:

這樣就完成了讀取自定義配置文件到程式中,然後通過註入就可以在Controller使用了

這次的分享怎麼樣,望勿噴,後面分享的文章可能就專註某個知識點,不會一篇講太分散的知識了,希望各位朋友多多支持,謝謝。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 假如有一張大表,現在需要增加一個非聚集索引,對於DBA來說,要有預估其大小以及執行時間的估算能力,尤其對一些企業使用SSD硬碟,其硬碟空間很是寶貴,增加索引如果錯誤預估其大小,很有可能導致硬碟資源超出預期使用量,造成沒必要的麻煩,這裡只針對其預估硬碟占用空間展開討論,行為標準8060 in_row_ ...
  • 慕課網sql server學習 資料庫第一印象:desktop--web server--database server** 幾大資料庫:sql server、oracle database、DB2、MySql、MongoDB。。。。。(SQL結構性查詢語言) 安裝軟體:SQL Server Man ...
  • win7 64位 oracle 11g 先登錄到sqlplus: sqlplus /nolog; sqlplus /nolog; 登錄資料庫: conn system/manager as sysdba; conn system/manager as sysdba; 然後啟動資料庫: startup ...
  • 1、安裝所需軟體包 # sudo su # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum install gcc perl-ExtUtils-MakeMaker 2、下載&安裝 # cd ...
  • 上一篇線上文檔預覽方案-office web apps發佈後收到很多網友的留言提問,所以準備再寫一篇,一來介紹一下域控伺服器安裝,總結一下大家問的多的問題,二來宣傳預覽服務安裝與技術支持的事情。 閱讀目錄 域控伺服器安裝步驟 常見問題 技術支持服務 總結 回到頂部 域控伺服器安裝步驟 域控伺服器安裝 ...
  • 產品的定位 做產品的都知道,是否支持多語言直接影響到產品的定位問題。 如果一個產品周期是一年的話,要完美支持多語言最少也得在加3個月!所需時間和頁面數量、資料庫表的數量和表的數據量成正比。 可以看出代價有多大,我們程式員就得和老闆嘮叨,做不得,成本太高。 如果前期不做,等到了後期項目表結構等都要重構 ...
  • 通過構造數據源,將控制項的屬性與其綁定,隨時能對一系列控制項屬性值的取值和賦值。方便監控需要增刪改查的控制項數據。不需要Control.Text來獲取該控制項的值了。一步到位,直接拿到控制項的值進行操作。 ...
  • 1、外包公司閑的蛋疼,搞什麼早上簽到,不簽到不扣錢,簽到不多給錢,而且還有更是閑的蛋疼得一個女同事不好好在家多陪陪家人,大早上跑到公司只為打卡,提升個人巨大魅力。為了幫助你們解脫,就寫了一個自動打卡程式。 2、一直都想寫這個程式,可是一直沒有思路,知道有個軟體公司找我做自動答題程式,於是自動打卡程式 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...