MVC2 扩展Models和自定义验证(学习笔记)
当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示)。
Visual Studio实体类:实体类
如果直接去编辑Visual Studio生成的实体类话,当数据库更新字段后,再次更新实体类的话,会覆盖我们所添加的验证代码。
那么我们就要避免在Visual Studio生成的类中去进行代码的编写。这就需要用到扩展Models类了。
1、让我们创建一个AccountModels.cs文件.
生成AccountModels,cs文件
2、开始编写AccountModels.cs(模型)文件的代码,注意注释的描述,对你的学习很有帮助.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations;//所添加的自定义验证引用 using System.ComponentModel;//所添加的自定义验证引用namespace MvcTest.Models {/// <summary>/// 指定元数据类/// </summary>[MetadataType(typeof(MemberMetadata))]//类名与MvcTest.edmx的表名相同,partial为局部类型修饰词,用来和实体数据类进行整合public partial class Member{public class MemberMetadata{[DisplayName("用户id")]public int Id { get; set; }[Required]//必须字符[DisplayName("用户名")]//定义说明文字,调用方法:<%: Html.LabelFor(m => m.UserName) %>public string UserName { get; set; }[Required][StringMinLength(6, 18, ErrorMessage = "密码大于6,小于18")]//自定义验证,下面有代码 [DataType(DataType.Password)][DisplayName("密码")]public string PassWord { get; set; }[Required][Email(ErrorMessage = "请输入正确的Email")]//自定义验证,下面有代码[DisplayName("Email")]public string Email { get; set; }[Required][DisplayName("创建时间")]public DateTime CreateTime { get; set; }[Required][DisplayName("最后登录时间")]public DateTime LogonTime { get; set; }[Required][DisplayName("安全问题")]public string Quesion { get; set; }[Required][DisplayName("安全答案")]public string Answer { get; set; }}/// <summary>/// 定义StringMinLength类,继承ValidationAttribute验证基础类/// </summary>public class StringMinLength : ValidationAttribute{private int _MinLength;private int _MaxLength;/// <summary>/// 定义方法,进行赋值/// </summary>/// <param name="MinLength">最小值</param>/// <param name="MaxLength">最大值</param>public StringMinLength(int MinLength, int MaxLength){_MinLength = MinLength;_MaxLength = MaxLength;}/// <summary>/// 重写IsValid方法/// </summary>/// <param name="value">验证时所传入的值,不管StringMinLength()方法定义几个参数,重写时只这样写:IsValid(object value)</param>/// <returns>override重写修饰符</returns>public override bool IsValid(object value){if (value.ToString().Length < _MinLength){return false;}if (value.ToString().Length > _MaxLength){return false;}return true;}}/// <summary>/// 定义EmailAttribute类,继承RegularExpressionAttribute正则表达式类,做验证使用,可重复调用/// </summary>public class EmailAttribute : RegularExpressionAttribute{// base 关键字用于从派生类中访问基类的成员public EmailAttribute() : base(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4})$") { }}} }
3、编写View(视图)代码.View我们用的是强类型绑定,还需要调用三个js,因为View用了母版页.所以另贴代码.这三个JS是验证时必须调用的.
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title> </title><script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script><script type="text/javascript" src="../../Scripts/MicrosoftMvcAjax.js"></script><script type="text/javascript" src="../../Scripts/MicrosoftMvcValidation.js"></script> </head>
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcTest.Models.Member>" %> <%--Inherits="System.Web.Mvc.ViewPage<MvcTest.Models.Member>" 强类型--%> <asp:Content ID="registerTitle" ContentPlaceHolderID="TitleContent" runat="server">注册 </asp:Content> <asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server"><h2>创建新帐户</h2><p>使用以下表单创建新帐户。</p><%--启用验证方法,必须在第一个using (Html.BeginForm())上面,Html的<form>标签无效--%><%Html.EnableClientValidation(); %><%--生成form表单--%><% using (Html.BeginForm()){ %><div><fieldset><legend>帐户信息</legend><div class="editor-label"><%: Html.LabelFor(m => m.UserName) %></div><div class="editor-field"><%: Html.TextBoxFor(m => m.UserName) %><%--验证失败时所显示的错误信息--%><%: Html.ValidationMessageFor(m => m.UserName) %></div><div class="editor-label"><%: Html.LabelFor(m => m.PassWord) %></div><div class="editor-field"><%: Html.PasswordFor(m => m.PassWord)%><%: Html.ValidationMessageFor(m => m.PassWord)%></div><div class="editor-label"><%: Html.LabelFor(m => m.Email) %></div><div class="editor-field"><%: Html.TextBoxFor(m => m.Email) %><%: Html.ValidationMessageFor(m => m.Email) %></div><div class="editor-label"><%: Html.LabelFor(m => m.Quesion) %></div><div class="editor-field"><%: Html.TextBoxFor(m => m.Quesion)%><%: Html.ValidationMessageFor(m => m.Quesion)%></div><div class="editor-label"><%: Html.LabelFor(m => m.Answer) %></div><div class="editor-field"><%: Html.TextBoxFor(m => m.Answer)%><%: Html.ValidationMessageFor(m => m.Answer)%></div><p><input type="submit" value="注册" /></p></fieldset></div><% } %> </asp:Content>
4、编写Controllers(控制器)
using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Security.Principal; using System.Web; using System.Web.Mvc; using System.Web.Routing; using System.Web.Security; using MvcTest.Models;//需要using Models.namespace MvcTest.Controllers {[HandleError]//处理由操作方法引发的异常public class AccountController : Controller{//new实体类MvcTestEntities db = new MvcTestEntities();#region 注册public ActionResult Register(){return View();}[HttpPost]//为了避免在表单未提交的时候访问此注册方法,需加[HttpPost],只有通过在本页面通过Post传输方式提交的表单才会访问此方法public ActionResult Register(Models.Member member){//做验证判断,如果通过则执行数据库写入代码if (ModelState.IsValid){db.AddToMember(new Models.Member{UserName = member.UserName,PassWord = member.PassWord,Email = member.Email,Quesion = member.Quesion,Answer = member.Answer,CreateTime = DateTime.Now,LogonTime = DateTime.Now});db.SaveChanges();//跳转页面.参数1:操作名称,参数2:路由参数return RedirectToAction("Index", "Home");}return View();}#endregion} }
运行效果
以上为全部代码。如有问题可留言.
转载于:https://www.cnblogs.com/Setme/p/3565840.html
MVC2 扩展Models和自定义验证(学习笔记)相关推荐
- MATLAB simulink 模型验证学习笔记
MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...
- JSP自定义标签学习笔记
http://blog.csdn.net/liangbinny/article/details/6309893 本文是本人学习<JavaWeb学习>书籍所记下的学习笔记 一.概述 JSP ...
- [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation
文章目录 仿真测试 Test Harness 创建Test Harness 导入测试用例 构建Test Harness模型 执行测试.分析结果 利用SDI进行结果的验证 Model Verficati ...
- java自定义注解学习笔记
注解学习笔记之自定义注解 @Target({1,2,3,4,5,6,7}) 1.ElementType.CONSTRUCTOR:用于描述构造器 2.ElementType.FIELD:用于描述域 3. ...
- Computer vision: models, learning and inference 学习笔记1:引言
学习笔记1:引言 目的 model,learning and inference 的含义 独特之处:基于模型的知识结构体系 最关键的是:模型(model) 目的 学习<computer visi ...
- [Simulink] 基于模型的测试与验证学习笔记_Step 3: Detecting Desig Errors
文章目录 Simulink Design Verifier 对模型做死逻辑检测 问题分析 模型除以零的检测 自动设计错误检测 总结 [注] 本文为2018 Mathworks 年会上机教程学习笔记, ...
- [zz]ASP.NET MVC2框架验证学习笔记
ASP.NET中的框架验证方法1: 1.模型定义 public class User { [Required(ErrorMessage="用户名不能为空!!")] [ ...
- MCDF验证学习笔记
文章目录 前言 mcdf模块简介 mcdf验证结构布局 测试用例 覆盖率收集 分析覆盖率收集情况 添加新的测试用例 异常激励测试 前言 本文仅个人学习过程笔记,如有疏漏,望指正或补充. mcdf模块简 ...
- mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...
<?php // php数据库编程 //php链接有 mysql 和mysqli // $conn = mysql_connect("localh ...
- mysql横向扩展_高可用MySQL学习笔记-面向横向扩展的MYSQL复制
负载增加时,有两个解决办法.一个是购买更加强大的服务器来应对增加的负载,称为"纵向扩展"(scale up):二是添加更多的服务器,称为"横向扩展"(scale ...
最新文章
- java中的char类型
- python 装饰器示例
- Hanlp在java中文分词中的使用介绍
- Python学习之——编码方式
- 数学建模 概率空间与统计结构
- 试用 smartdraw 2010 方便快捷的图表工具
- IDEA创建Web项目及部署Tomcat
- Django 3.2.5博客开发教程:URL与视图函数
- php滚动公告源码,JavaScript_jquery垂直公告滚动实现代码,复制代码 代码如下: !DOCTYPE - phpStudy...
- oracle批量update
- Redis面试 - Redis 主从架构
- 股票历史数据-股票历史数据查询
- 贴片电阻字码阻值对照表
- 短视频是如何赚钱的?切入短视频风口的3种玩法
- 资源共享——《嵌入式Linux应用开发完全手册》韦东山 PDF电子档下载
- 如何设计最惊艳的PPT
- 使用Arcgis Pro 2.5生成地图文件(tpk,mmpk)
- 关于PaaS平台开发的五个大坑
- 工控安全之系统加固篇
- matlab contour3函数,matlab 等值线函数 contour
热门文章
- protoc 命令 java_protoc 指令介绍
- 微信小程序云开发之初体验(详细教程)
- 51单片机外设篇:红外通信
- 黑苹果OC的血泪史之硬盘(三星固态1T)篇
- oracle建表类型,oracle 建表类型以及约束
- 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
- 牛顿插值法在Matlab上的实现
- 金蝶软件和用友软件部署在阿里云ECS具体方法及教程
- AB压力测试(简易版操作)
- Unhandled exception. System.NullReferenceException: Object reference not set to an....