表示層框架結構 /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- 最外層: /Views/Shared/_Root.Head.cshtml 根框架<html>根節點 其他3個Layout全部包含在此 佈局頁面的Body 中
- /Views/Shared/_Root.cshtml 包含商城網頁頭部 和導航菜單,其中包含 :
- @Html.Partial("Header") 部分頁 位於 /Shared 同級目錄下的 Header.cshtml, Html.Partial方法 繪製的頁面沒有對應的Controller ,包含的主要幾個網頁頭部的Action
- @Html.Action("Logo", "Common") 位於/Common/Logo.cshtml 網頁頭部網站名稱等內容
- @Html.Action("HeaderLinks", "Common") 用戶登陸信息,收藏夾 等內容
- @Html.Action("FlyoutShoppingCart", "ShoppingCart") 購物車
- @Html.Action("SearchBox", "Catalog") 搜索框
- @Html.Action("Footer", "Common") 網站底部內容
- @Html.Partial("Header") 部分頁 位於 /Shared 同級目錄下的 Header.cshtml, Html.Partial方法 繪製的頁面沒有對應的Controller ,包含的主要幾個網頁頭部的Action
- /Views/Shared/_ColumnsOne.cshtml 主要佈局頁,網頁內容不含側邊欄 同目錄下 還有一個 _ColumnsTwo.cshtml 包含側邊欄
- /Views/_ViewStart.cshtml 所有MVC View頁面預設使用此模板
除_ViewStart.cshtml 外Views 文件夾中的所有內容都可以被 /Themes/當前主題名稱/Views目錄對應同名文件替代
後臺主題設置功能鏈接 /Admin/Setting/GeneralCommon
表單數據驗證
以~/Views/Customer/Info.cshtml 頁面為例
登陸後點擊用戶名稱首頁
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(“內容太長”)
屬性驗證,其中 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 中的動態路由