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


表示層框架結構

/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中的代碼樣式

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM