当我们利用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和自定义验证(学习笔记)相关推荐

  1. MATLAB simulink 模型验证学习笔记

    MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...

  2. JSP自定义标签学习笔记

    http://blog.csdn.net/liangbinny/article/details/6309893 本文是本人学习<JavaWeb学习>书籍所记下的学习笔记 一.概述 JSP ...

  3. [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation

    文章目录 仿真测试 Test Harness 创建Test Harness 导入测试用例 构建Test Harness模型 执行测试.分析结果 利用SDI进行结果的验证 Model Verficati ...

  4. java自定义注解学习笔记

    注解学习笔记之自定义注解 @Target({1,2,3,4,5,6,7}) 1.ElementType.CONSTRUCTOR:用于描述构造器 2.ElementType.FIELD:用于描述域 3. ...

  5. Computer vision: models, learning and inference 学习笔记1:引言

    学习笔记1:引言 目的 model,learning and inference 的含义 独特之处:基于模型的知识结构体系 最关键的是:模型(model) 目的 学习<computer visi ...

  6. [Simulink] 基于模型的测试与验证学习笔记_Step 3: Detecting Desig Errors

    文章目录 Simulink Design Verifier 对模型做死逻辑检测 问题分析 模型除以零的检测 自动设计错误检测 总结 [注] 本文为2018 Mathworks 年会上机教程学习笔记, ...

  7. [zz]ASP.NET MVC2框架验证学习笔记

    ASP.NET中的框架验证方法1: 1.模型定义 public class User { [Required(ErrorMessage="用户名不能为空!!")]        [ ...

  8. MCDF验证学习笔记

    文章目录 前言 mcdf模块简介 mcdf验证结构布局 测试用例 覆盖率收集 分析覆盖率收集情况 添加新的测试用例 异常激励测试 前言 本文仅个人学习过程笔记,如有疏漏,望指正或补充. mcdf模块简 ...

  9. mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...

    <?php         // php数据库编程     //php链接有 mysql 和mysqli    //    $conn  = mysql_connect("localh ...

  10. mysql横向扩展_高可用MySQL学习笔记-面向横向扩展的MYSQL复制

    负载增加时,有两个解决办法.一个是购买更加强大的服务器来应对增加的负载,称为"纵向扩展"(scale up):二是添加更多的服务器,称为"横向扩展"(scale ...

最新文章

  1. java中的char类型
  2. python 装饰器示例
  3. Hanlp在java中文分词中的使用介绍
  4. Python学习之——编码方式
  5. 数学建模 概率空间与统计结构
  6. 试用 smartdraw 2010 方便快捷的图表工具
  7. IDEA创建Web项目及部署Tomcat
  8. Django 3.2.5博客开发教程:URL与视图函数
  9. php滚动公告源码,JavaScript_jquery垂直公告滚动实现代码,复制代码 代码如下: !DOCTYPE - phpStudy...
  10. oracle批量update
  11. Redis面试 - Redis 主从架构
  12. 股票历史数据-股票历史数据查询
  13. 贴片电阻字码阻值对照表
  14. 短视频是如何赚钱的?切入短视频风口的3种玩法
  15. 资源共享——《嵌入式Linux应用开发完全手册》韦东山 PDF电子档下载
  16. 如何设计最惊艳的PPT
  17. 使用Arcgis Pro 2.5生成地图文件(tpk,mmpk)
  18. 关于PaaS平台开发的五个大坑
  19. 工控安全之系统加固篇
  20. matlab contour3函数,matlab 等值线函数 contour

热门文章

  1. protoc 命令 java_protoc 指令介绍
  2. 微信小程序云开发之初体验(详细教程)
  3. 51单片机外设篇:红外通信
  4. 黑苹果OC的血泪史之硬盘(三星固态1T)篇
  5. oracle建表类型,oracle 建表类型以及约束
  6. 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
  7. 牛顿插值法在Matlab上的实现
  8. 金蝶软件和用友软件部署在阿里云ECS具体方法及教程
  9. AB压力测试(简易版操作)
  10. Unhandled exception. System.NullReferenceException: Object reference not set to an....