表示层框架结构

/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目录对应同名文件替代

后台主题设置功能链接 /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框架研究(二) MVC 表示层与数据验证的更多相关文章

  1. NopCommerce 3.80框架研究(一) 数据访问与持久化

    NopCommerce 是一个国外的开源电商系统.3.80版本使用EF6.0 和.Net Framework 4.5.1 并引入了Autofac , Autofac是一款IOC框架,比较于其他的IOC ...

  2. NopCommerce 3.80框架研究(三)替换tinymce 为KindEditor

    NopCommerce 自带的编辑器tinymce 功能不是很全.所以尝试将其替换为功能更强大的 KindEditor 并替实现文件上传和在线浏览功能 首先下载 并解压到如下位置 请注意这里是部署在N ...

  3. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  4. .NET MVC中的数据验证

    一  概述 关于数据验证和数据注解,是任何软件系统不可小觑的必要模块,主要作用是为了保证数据安全性.防止漏洞注入和网络攻击.从数据验证的验证方式来说,我们一般分为客户端验证和服务端验证(或者两种方式相 ...

  5. Prism框架研究(二)

    首先在介绍本节内容之前,首先来看看官方文档来如何描述Prism 应用的初始化吧!A Prism application requires registration and configuration ...

  6. ABP 极简入门教程(二 MVC方式显示数据)

    增加显示菜单 Sample.Web.MVC项目中找到startup目录打开SampleNavigationProvider.cs,根据现有内容添加以下内容 .AddItem( new MenuItem ...

  7. MVC 数据验证【转】

    [转自]http://www.cnblogs.com/dozer/archive/2010/04/12/MVC-DataAnnotations.html 作者Dozer 今天在这里给大家介绍一下MVC ...

  8. MVC数据验证

    深入浅出 MVC 数据验证 2.0 [附演示源码] 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MV ...

  9. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

随机推荐

  1. java线程基础知识----SecurityManager类详解

    在查看java Thread源码的时候发现一个类----securityManager,虽然很早就知道存在这样一个类但是都没有深究,今天查看了它的api和源码,发现这个类功能强大,可以做很多权限控制策 ...

  2. webpack@3.6.0(4) -- 配置模块化开发

    本篇内容 watch 版权插件 hash.chunkhash.contenthash的区别 watch 修改文件时自动打包 webpack --watch //webpack.config.js,与d ...

  3. Go:json包的坑

    import encoding/json func test() { m := make(map[string]string) a := `{"xiaoming":"男& ...

  4. 牛客网小白月赛6C(DFS,思维)

    #include<bits/stdc++.h>using namespace std;vector<int>tree[1000010];int sum=0;int dfs(in ...

  5. bzoj1934: [Shoi2007]Vote 善意的投票(最小割)

    传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...

  6. OSD

    OSD(on-Screen Display)屏幕单式调节方式 主要功能是显示一个用户控制界面和一些系统状态信息. 简单点说:OSD技术就是在屏幕的原有图像上面叠加显示相关信息(包括文字.图片等)的技术 ...

  7. 点击对应的a标签返回相应的第几个

    面试中遇到的问题,前两天一直没有解决,今天想想还是得要想办法才行,其实仔细想的话很简单,惭愧啊,面试的时候没有做出来! 题目是这样的,如果一个body中有5个a标签,当我们点击对应的a标签时,aler ...

  8. linux环境下jdk部署配置

    1.java官网下载相关的jdk包 2.配置系统环境变量,编辑/etc/profile文件,在文件的末尾添加一下信息: export JAVA_HOME=/usr/jdk1.8.0_101export ...

  9. git 处理 crlf rf

    假如你正在 Windows 上写程序,又或者你正在和其他人合作,他们在 Windows 上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题.这是因为 Windows 使用回车和换行两 ...

  10. 新手常见Python运行时错误

    经过整理与在实际中遇到的问题,将新手经常遇到的汇总下,以便自己犯傻又这么干了 1)"SyntaxError :invalid syntax",语法错误 A.查看是否在 if , e ...