MVC Core 網站開發(Ninesky) 2.1、欄目的前臺顯示(補充)

来源:http://www.cnblogs.com/mzwhj/archive/2016/12/11/6158836.html
-Advertisement-
Play Games

在2.1、欄目的前臺顯示中因右鍵沒有添加視圖把微軟給鄙視了一下,後來有仔細研究了一下發現應該鄙視自己,其實這個功能是有的,是自己沒搞清楚亂吐糟。 其實只要在NuGet中安裝兩個包(Microsoft.VisualStudio.Web.CodeGeneration.Tools和Microsoft.Vi... ...


在2.1、欄目的前臺顯示中因右鍵沒有添加視圖把微軟給鄙視了一下,後來有仔細研究了一下發現應該鄙視自己,其實這個功能是有的,是自己沒搞清楚亂吐糟。

其實只要在NuGet中安裝兩個包(Microsoft.VisualStudio.Web.CodeGeneration.Tools和Microsoft.VisualStudio.Web.CodeGenerators.Mvc)就可以了。如下圖:

 

image

是不是熟悉的感覺又回來了。。

image

現在可以用右鍵的在彈出的對話框中添加視圖了。在實際的使用中模板,可以選擇CreateEdit可以正常使用。

image

而選擇DeleteDetailsList時會出現下圖的錯誤,搞了2天了都沒搞定,麻煩知道的朋友留言或發QQ342211509解惑一下,謝謝。

image

 

分割線==========================================================

上次實現了欄目數據的顯示,實際上欄目不會顯示這些內容,而是根據欄目類型的不同以不同方式處理。如下圖:

1.4欄目顯示

 

一、添加錯誤顯示

首先吧錯誤頁面的顯示弄出來,方便後面使用。

1、錯誤模型

Ninesky.Web上右鍵->添加->文件夾,輸入名稱Models。Models上右鍵->添加->,名稱Error

  1 namespace Ninesky.Web.Models
  2 {
  3     /// <summary>
  4     /// 錯誤模型
  5     /// </summary>
  6     public class Error
  7     {
  8         /// <summary>
  9         /// 錯誤
 10         /// </summary>
 11         public string Title { get; set; }
 12 
 13         /// <summary>
 14         /// 名稱
 15         /// </summary>
 16         public string Name { get; set; }
 17 
 18         /// <summary>
 19         /// 描述
 20         /// </summary>
 21         public string Description { get; set; }
 22     }
 23 }
 24 

2、錯誤視圖

打開視圖Views\Shared\Error.cshtml,修改成如下代碼

  1 @model Ninesky.Web.Models.Error
  2 @{
  3     ViewData["Title"] = Model.Title;
  4 }
  5 
  6 <h2 class="text-danger">@Model.Name</h2>
  7 <p>
  8     @Html.Raw(Model.Description)
  9 </p>

 

二、完善欄目顯示Action和視圖

1、修改欄目顯示代碼。

打開Controllers\CategoryController.cs修改Index代碼如下:

  1 /// <summary>
  2         /// 查看欄目
  3         /// </summary>
  4         /// <param name="id">欄目Id</param>
  5         /// <returns></returns>
  6         [Route("/Category/{id:int}")]
  7         public IActionResult Index(int id)
  8         {
  9             var category = _categoryService.Find(id);
 10             if (category == null) return View("Error", new Models.Error { Title = "錯誤消息", Name="欄目不存在", Description="訪問ID為【"+id+"】的欄目時發生錯誤,該欄目不存在。" });
 11             switch (category.Type)
 12             {
 13                 case CategoryType.General:
 14                     if (category.General == null) return View("Error",new Models.Error { Title="錯誤消息", Name="欄目數據不完整",Description="找不到欄目【"+category.Name+"】的詳細數據。" });
 15                     return View(category.General.View, category);
 16                 case CategoryType.Page:
 17                     if (category.Page == null) return View("Error", new Models.Error { Title = "錯誤消息", Name = "欄目數據不完整", Description = "找不到欄目【" + category.Name + "】的詳細數據。" });
 18                     return View(category.Page.View, category);
 19                 case CategoryType.Link:
 20                     if (category.Link == null) return View("Error", new Models.Error { Title = "錯誤消息", Name = "欄目數據不完整", Description = "找不到欄目【" + category.Name + "】的詳細數據。" });
 21                     return Redirect(category.Link.Url);
 22                 default:
 23                     return View("Error", new Models.Error { Title = "錯誤消息", Name = "欄目數據錯誤", Description = "欄目【" + category.Name + "】的類型錯誤。" });
 24 
 25             }
 26         }

代碼中根據欄目三種類型做不同的顯示。

2、視圖實現

常規欄目視圖

打開Views\Category\Index.cshtml。修改代碼如下:

  1 @model Ninesky.Base.Category
  2 @{
  3     ViewData["Title"] = Model.Name;
  4 }
  5 
  6 <h2>@Model.Name</h2>
  7 <div class="row">
  8     <div class="col-lg-2 col-md-3">側欄</div>
  9     <div class="col-lg-10 col-md-9">
 10         <div>
 11             <dl class="dl-horizontal">
 12                 <dt>
 13                     @Html.DisplayNameFor(model => model.ParentId)
 14                 </dt>
 15                 <dd>
 16                     @Html.DisplayFor(model => model.ParentId)
 17                 </dd>
 18                 <dt>
 19                     @Html.DisplayNameFor(model => model.CategoryId)
 20                 </dt>
 21                 <dd>
 22                     @Html.DisplayFor(model => model.CategoryId)
 23                 </dd>
 24                 <dt>
 25                     @Html.DisplayNameFor(model => model.Name)
 26                 </dt>
 27                 <dd>
 28                     @Html.DisplayFor(model => model.Name)
 29                 </dd>
 30                 <dt>
 31                     @Html.DisplayNameFor(model => model.Type)
 32                 </dt>
 33                 <dd>
 34                     @Html.DisplayFor(model => model.Type)
 35                 </dd>
 36                 <dt>
 37                     @Html.DisplayNameFor(model => model.Description)
 38                 </dt>
 39                 <dd>
 40                     @Html.DisplayFor(model => model.Description)
 41                 </dd>
 42                 <dt>
 43                     @Html.DisplayNameFor(model => model.General.View)
 44                 </dt>
 45                 <dd>
 46                     @Html.DisplayFor(model => model.General.View)
 47                 </dd>
 48                 <dt>
 49                     @Html.DisplayNameFor(model => model.General.Module)
 50                 </dt>
 51                 <dd>
 52                     @Html.DisplayFor(model => model.General.Module)
 53                 </dd>
 54                 <dt>
 55                     @Html.DisplayNameFor(model => model.General.ContentView)
 56                 </dt>
 57                 <dd>
 58                     @Html.DisplayFor(model => model.General.ContentView)
 59                 </dd>
 60                 <dt>
 61                     @Html.DisplayNameFor(model => model.General.ContentOrder)
 62                 </dt>
 63                 <dd>
 64                     @Html.DisplayFor(model => model.General.ContentOrder)
 65                 </dd>
 66             </dl>
 67         </div>
 68     </div>
 69 </div>

單頁欄目視圖

將常規欄目視圖Index複製並重命名為Page.cshtml,修改代碼以顯示單頁模型內容

  1 @model Ninesky.Base.Category
  2 @{
  3     ViewData["Title"] = Model.Name;
  4 }
  5 
  6 <h2>@Model.Name</h2>
  7 <div class="row">
  8     <div class="col-lg-2 col-md-3">側欄</div>
  9     <div class="col-lg-10 col-md-9">
 10         <div>
 11             <dl class="dl-horizontal">
 12                 <dt>
 13                     @Html.DisplayNameFor(model => model.ParentId)
 14                 </dt>
 15                 <dd>
 16                     @Html.DisplayFor(model => model.ParentId)
 17                 </dd>
 18                 <dt>
 19                     @Html.DisplayNameFor(model => model.CategoryId)
 20                 </dt>
 21                 <dd>
 22                     @Html.DisplayFor(model => model.CategoryId)
 23                 </dd>
 24                 <dt>
 25                     @Html.DisplayNameFor(model => model.Name)
 26                 </dt>
 27                 <dd>
 28                     @Html.DisplayFor(model => model.Name)
 29                 </dd>
 30                 <dt>
 31                     @Html.DisplayNameFor(model => model.Type)
 32                 </dt>
 33                 <dd>
 34                     @Html.DisplayFor(model => model.Type)
 35                 </dd>
 36                 <dt>
 37                     @Html.DisplayNameFor(model => model.Description)
 38                 </dt>
 39                 <dd>
 40                     @Html.DisplayFor(model => model.Description)
 41                 </dd>
 42                 <dt>
 43                     @Html.DisplayNameFor(model => model.Page.Content)
 44                 </dt>
 45                 <dd>
 46                     @Html.Raw(Model.Page.Content)
 47                 </dd>
 48             </dl>
 49         </div>
 50     </div>
 51 </div>

 

三、完善數據存儲代碼

打開Ninesky.DataLibrary的BaseRepository.cs,修改Find方法,改好後的代碼如下:

  1         /// <summary>
  2         /// 查詢
  3         /// </summary>
  4         /// <param name="keyValue">主鍵</param>
  5         /// <returns>實體</returns>
  6         public virtual T Find(params object[] keyValue)
  7         {
  8             return _dbContext.Set<T>().Find(keyValue);
  9         }
 10 
 11         /// <summary>
 12         /// 查詢
 13         /// </summary>
 14         /// <param name="predicate">查詢表達式</param>
 15         /// <returns>實體</returns>
 16         public virtual T Find(Expression<Func<T, bool>> predicate)
 17         {
 18             return Find(null, predicate);
 19         }
 20 
 21         /// <summary>
 22         /// 查詢
 23         /// </summary>
 24         /// <param name="includeParams">導航屬性</param>
 25         /// <param name="predicate">查詢表達式</param>
 26         /// <returns>實體</returns>
 27         public virtual T Find(string[] includeParams, Expression<Func<T, bool>> predicate)
 28         {
 29             var queryable = _dbContext.Set<T>().AsQueryable();
 30             if (includeParams != null)
 31             {
 32                 foreach (string param in includeParams)
 33                 {
 34                     queryable = queryable.Include(param);
 35                 }
 36             }
 37             return queryable.SingleOrDefault(predicate);
 38         }

_dbContext.Set<T>().Find(keyValue);根據主鍵查詢實體,會先查詢緩存,優先使用。

SingleOrDefault(predicate); 根據表達式查詢:

  • public virtual T Find(string[] includeParams, Expression<Func<T, bool>> predicate)-帶導航屬性
  • public virtual T Find(Expression<Func<T, bool>> predicate)-不帶導航屬性

 

四、完善業務邏輯

到項目Ninesky.Base中,打開CategoryService,修改Find方法

  1         /// <summary>
  2         /// 查找
  3         /// </summary>
  4         /// <param name="Id">欄目Id</param>
  5         /// <returns></returns>
  6         public Category Find(int Id)
  7         {
  8             return _baseRepository.Find(new string[] { "General", "Page", "Link" }, c => c.CategoryId == Id);
  9         }

 

五、輸入測試數據

打開Sqlserver 對象資源管理器,找到Ninesky資料庫

image

分別向表Categories,CategoryGeneral,CategoryPage、CategoryLink手動添加數據,如下圖:

image

image

image

image

 

在VS中按F5運行。瀏覽器中輸入Id=2顯示常規欄目

image

Id=3顯示

image

Id=5則跳轉。

六、其他

 

代碼托管地址:https://git.oschina.net/ninesky/Ninesky

文章發佈地址:http://www.ninesky.cn

                 http://mzwhj.cnblogs.com/

代碼包下載:2.1補充.rar

 

返回目錄


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

-Advertisement-
Play Games
更多相關文章
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 最近沒有時間好久沒有寫文章了,今天由於需要安裝docker學習虛擬容器的知識,需要升級OS的內核。目前我這邊使用的OS是centos6.5,內核是2.6版本的,如下: cat /etc/i... ...
  • 字元設備是3大類設備(字元設備、塊設備和網路設備)中較簡單的一類設備,其驅動程式中完成的主要工作是初始化、添加和刪除cdev結構體,申請和釋放設備號,以及填充 file_operations結構體中的操作函數,實現file_operations結構體中的read()、write()和ioctl()等... ...
  • 問題描述:在Windows10下安裝Ubuntu。 使用工具:Windows10、Ubuntu16.04 LTS安裝包、UltraISO、easyBCD。 操作步驟: 1、安裝之前要給Ubuntu分出一定大小的磁碟空間。我用170G來安裝Ubuntu。我的硬碟比較大,如果硬碟較小,可以選擇50G等大 ...
  • 問題概述:在裝系統的時候有時候並不能一下分出完全符合我們使用習慣的分區大小,我們可能需要在後期調整分區大小。以下是有關分區大小調整的操作。 使用工具:Windows磁碟管理工具。 操作步驟: 1、使用組合鍵win+x,彈出菜單,選中“電腦管理”,選擇“磁碟管理”。 2、這裡簡要說明一下Window ...
  • 問題概述:因為在自己學習Linux的時候,按照網上的教程錯誤的刪除了Ubuntu的一個內核驅動,導致Ubuntu不能啟動。我想到的辦法是重新安裝系統,重裝系統的第一步便是將Ubuntu從電腦中卸載。該筆記是有關如何刪除Ubuntu啟動項的。 使用工具:Windows10,Ubuntu16.04 LT ...
  • NAND FLASH是一個存儲晶元 那麼: 這樣的操作很合理"讀地址A的數據,把數據B寫到地址A" 問1. 原理圖上NAND FLASH和S3C2440之間只有數據線, 怎麼傳輸地址? 答1.在DATA0~DATA7上既傳輸數據,又傳輸地址 當ALE為高電平時傳輸的是地址, ... ...
  • Linux設備模型是對系統設備組織架構進行抽象的一個數據結構,旨在為設備驅動進行分層、分類、組織。降低設備多樣性帶來的Linux驅動開發的複雜度,以及設備熱拔插處理、電源管理等。 ...
  • 之前沒怎麼註意,在使用下載盒通過isp下載stm32時,由於是通過stm32板子給下載盒供電,所以是我的stm32板子和下載盒同時上電。這樣總是不能夠進入下載模式,後來對下載盒進行模擬,發現在下載發送了7F之前,下載盒已經收到了一個位元組,導致在判斷首位元組時出錯。 後來就先把下載和給去了,直接把串口接 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...