NopCommerce 3.80框架研究(二) MVC 表示層與數據驗證

来源:http://www.cnblogs.com/Qbit/archive/2016/09/14/5873688.html
-Advertisement-
Play Games

表示層框架結構 /Views/Shared/_Root.Head.cshtml /Views/Shared/_Root.cshtml /Views/Shared/_ColumnsOne.cshtml /Views/_ViewStart.cshtml 最外層: /Views/Shared/_Root.... ...


表示層框架結構

/Views/Shared/_Root.Head.cshtml /Views/Shared/_Root.cshtml /Views/Shared/_ColumnsOne.cshtml /Views/_ViewStart.cshtml
  1. 最外層: /Views/Shared/_Root.Head.cshtml 根框架<html>根節點 其他3個Layout全部包含在此 佈局頁面的Body 中
  2. /Views/Shared/_Root.cshtml  包含商城網頁頭部 和導航菜單,其中包含 :
    1. @Html.Partial("Header") 部分頁 位於 /Shared 同級目錄下的 Header.cshtml, Html.Partial方法 繪製的頁面沒有對應的Controller ,包含的主要幾個網頁頭部的Action
      1. @Html.Action("Logo", "Common")  位於/Common/Logo.cshtml 網頁頭部網站名稱等內容
      2. @Html.Action("HeaderLinks", "Common") 用戶登陸信息,收藏夾 等內容
      3. @Html.Action("FlyoutShoppingCart", "ShoppingCart") 購物車
      4. @Html.Action("SearchBox", "Catalog") 搜索框
    2. @Html.Action("Footer", "Common") 網站底部內容
  3. /Views/Shared/_ColumnsOne.cshtml 主要佈局頁,網頁內容不含側邊欄 同目錄下 還有一個 _ColumnsTwo.cshtml 包含側邊欄
  4. /Views/_ViewStart.cshtml 所有MVC View頁面預設使用此模板

除_ViewStart.cshtml 外Views 文件夾中的所有內容都可以被  /Themes/當前主題名稱/Views目錄對應同名文件替代

image

後臺主題設置功能鏈接 /Admin/Setting/GeneralCommon

表單數據驗證

以~/Views/Customer/Info.cshtml 頁面為例

登陸後點擊用戶名稱首頁

image

Nop.Web.Controllers.Action 定義

[NopHttpsRequirement(SslRequirement.Yes)]
       public ActionResult Info()
       {
           if (!_workContext.CurrentCustomer.IsRegistered())
               return new HttpUnauthorizedResult();

           var customer = _workContext.CurrentCustomer;

           var model = new CustomerInfoModel();
           PrepareCustomerInfoModel(model, customer, false);

           return View(model);
       }

Action 返回類型為   Nop.Web.Models.Customer.CustomerInfoModel 可以選定類型按快捷鍵 F12 打開文件查看類型定義

CustomerInfoModel 類型定義 。頭部 的CustomerInfoValidator 是類型規則驗證定義

[Validator(typeof(CustomerInfoValidator))]
public partial class CustomerInfoModel : BaseNopModel

在構造函數中可以使用如下 類似Jquery 的鏈式表達式進行規則驗證

RuleFor(x=>x.Email).NotEmpty().WithMessage(“不可為空”).When(x=>x.Email>150).WithMessage(“內容太長”)

image


屬性驗證,其中 NopResourceDisplayName 如果不需要國際化可以替換為 System.ComponentModel.DisplayName

Attribute值可以替換為 中文名稱

[NopResourceDisplayName("Account.Fields.Username")]
       [AllowHtml]
       public string Username { get; set; }

表單定義:

<div class="page-body">
        @using (Html.BeginForm())

{

<!--表單定義-->

}

using (Html.BeginForm()) 預設提交到當前同名Action,即

public ActionResult Info(CustomerInfoModel model, FormCollection form)

也可以自己定義指向的Action 名稱

using (Html.BeginForm(”ActionName“,”ControllerName”,new {其他參數名稱=其他參數值}))

 

一些mvc 的語法總結

 

 

關於Html.Action 和 Html.Partial

Partial 和RenderPartial:
這兩個的性質都是一樣, 只指把一個個View給鑲入進來, 只是回傳值有點不一樣
Partial 回傳的一個Object (MvcHtmlString), 回傳一個String 把一堆Html給回傳出來, 然後寫進到主頁面上

@Html.Partial("ViewName")

RenderPartial 回傳的是void, 而這個方法會在主頁面上添加指定的View

@{ Html.RenderPartial("ViewName");}

這兩個方法沒有用到Controller, 是直接把一個View(Page) 給加進來
而RenderAction 有點不一樣, 這是一個Action, 所以會用到Controller 之後再回傳一個頁面

詳細參考:Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 區別和用法

 

 


吐槽一下 windows Live Writer 雖然可以插入代碼高亮,但是高亮的格式不太滿意,還不如上一篇用word 發佈的,可以直接粘貼VS中的代碼樣式

 

預告下一篇 : NopCommerce 3.80 中的動態路由


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

-Advertisement-
Play Games
更多相關文章
  • Linux系統實戰項目——sudo日誌審計 由於企業內部許可權管理啟用了sudo許可權管理,但是還是有一定的風險因素,畢竟運維、開發等各個人員技術水平、操作習慣都不相同,也會因一時失誤造成誤操作,從而影響系統運行 因此,徵對sudo提權的操作,便於管理與後續維護,開啟sudo日誌審計功能對用戶執行 su ...
  • 本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程請看:Linux Shell系列教程 函數可以將一個複雜功能劃分成若幹模塊,從而使程式結構更加清晰,代碼重覆利用率更高。 高級語言都支持函數,Shell也不例外。今天就為大家介紹下Shell中函數相關用法。 一、She ...
  • 本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程請看:Linux Shell系列教程 在上兩篇文章Linux Shell系列教程之(十)Shell for迴圈和Linux Shell系列教程之(十一)Shell while迴圈中,我們已經對Shell 迴圈語句的fo ...
  • 1. 查看svn 的用戶名,密碼: 找到用戶名,密碼文件,都是明文的,你可以看到 例:linux hjj@hjj-ubuntu:~/.subversion/auth/svn.simple$ ls 9aad7e9f713353a655cf4365926120c7 hjj@hjj-ubuntu:~/.s ...
  • 先上一張鳥哥LVM的圖.感覺這張最清楚了. 這裡到此就結束的.整合一下相關的一些步驟: ...
  • 前言 公司開發使用docker,每次登陸自己開發機總要輸入 ssh user_name@ip_string,然後再確認輸入password,手快了還經常會輸錯。作為一個懶人,肯定要找一個取巧的方式,查看了下ssh命令,由於它要進行一次跟伺服器的加密交互,所以沒有直接附帶密碼登陸的選項,只好作罷。 前 ...
  • 本文版權歸博客園和作者吳雙共同所有,歡迎轉載,轉載和爬蟲請註明博客園蝸牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html。 最近打算分享一系列.NET Core實用後臺架構,所以首先介紹EF Core。目前國內各大論壇,各位大牛的分享,是按照Micros ...
  • 這幾天一直在研究TX Text Control的使用,由於這方面的資料相對比較少,主要靠下載版本的案例代碼進行研究,以及官方的一些博客案例進行學習,使用總結了一些心得,特將其總結出來,供大家分享學習。本篇隨筆主要介紹TX Text Control V20的相關使用心得。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...