NopCommerce 3.80框架研究(二) MVC 表示层与数据验证
表示层框架结构
- 最外层: /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框架研究(二) MVC 表示层与数据验证的更多相关文章
- NopCommerce 3.80框架研究(一) 数据访问与持久化
NopCommerce 是一个国外的开源电商系统.3.80版本使用EF6.0 和.Net Framework 4.5.1 并引入了Autofac , Autofac是一款IOC框架,比较于其他的IOC ...
- NopCommerce 3.80框架研究(三)替换tinymce 为KindEditor
NopCommerce 自带的编辑器tinymce 功能不是很全.所以尝试将其替换为功能更强大的 KindEditor 并替实现文件上传和在线浏览功能 首先下载 并解压到如下位置 请注意这里是部署在N ...
- 【ASP.NET MVC系列】数据验证和注解
[01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...
- .NET MVC中的数据验证
一 概述 关于数据验证和数据注解,是任何软件系统不可小觑的必要模块,主要作用是为了保证数据安全性.防止漏洞注入和网络攻击.从数据验证的验证方式来说,我们一般分为客户端验证和服务端验证(或者两种方式相 ...
- Prism框架研究(二)
首先在介绍本节内容之前,首先来看看官方文档来如何描述Prism 应用的初始化吧!A Prism application requires registration and configuration ...
- ABP 极简入门教程(二 MVC方式显示数据)
增加显示菜单 Sample.Web.MVC项目中找到startup目录打开SampleNavigationProvider.cs,根据现有内容添加以下内容 .AddItem( new MenuItem ...
- MVC 数据验证【转】
[转自]http://www.cnblogs.com/dozer/archive/2010/04/12/MVC-DataAnnotations.html 作者Dozer 今天在这里给大家介绍一下MVC ...
- MVC数据验证
深入浅出 MVC 数据验证 2.0 [附演示源码] 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MV ...
- <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解
MVC 3 数据验证 Model Validation 详解 再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...
随机推荐
- 为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash&(h-1)=hash%h)位运算公式等价于取余运算?
1.什么是hash表? 答:简单回答散列表,在hash结构散列(分散)存放的一种数据集结构. 2.如何散列排布,如何均匀排布? 答:取余运算 3.Java中如何实现? 答:hash&(h-1) ...
- 2018牛客多校第九场E(动态规划,思维,取模)
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...
- cf822D(质因子)
题目链接: http://codeforces.com/problemset/problem/822/D 题意: 输入 t, l, r 求 t0·f(l) + t1·f(l + 1) + ... + ...
- loj #2325. 「清华集训 2017」小Y和恐怖的奴隶主
#2325. 「清华集训 2017」小Y和恐怖的奴隶主 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 "A fight? Co ...
- 洛谷P3070 [USACO13JAN]岛游记Island Travels
P3070 [USACO13JAN]岛游记Island Travels 题目描述 Farmer John has taken the cows to a vacation out on the oce ...
- springBoot2.0 配置 mybatis+mybatisPlus+redis
一.Idea新建springBoot项目 next到完成,然后修改使用自己的maven 等待下载包 二.pom.xml文件 <?xml version="1.0" encod ...
- thinkphp5实现文章上一篇,下一篇
写在控制器 //列表是按照根据id降序排列的,所以上一篇 $prv=Db::table('qy_article')->where('at_id','>',$at_id)->where ...
- thinkphp5.1使用支付宝接口(沙箱环境)
接口文件以及沙箱的测试账号可以去支付宝开发中心获取,下面给出一个简单地例子 我新建了一个控制器Pay用来专门做支付 <?phpnamespace app\index\controller; us ...
- Uva1149
每个bin最多只能放两个,所以最佳的贪心策略是从大的开始放,如果有空间放第二个,尽量放最大的. #include <bits/stdc++.h> using namespace std; ...
- Linux--2 Linux之文档与目录结构、shell基本命令
一.Linux之文档与目录结构 1.Linux之文档与目录结构 Linux目录结构的组织形式和Windows有很大的不同.Linux没有“盘(如C盘.D盘.E盘)”的概念,而是建立一个根"/ ...