ASP.NET MVC4系列验证机制、伙伴类共享源数据信息(数据注解和验证)
一,mvc前后台验证
自定义属性标签MyRegularExpression
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MvcAjaxValidate.Models
{
public class MyRegularExpression:RegularExpressionAttribute
{
//为了多次修改正则,我们直接写一个类,只改这个地方就好//勿忘global文件
//DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MyRegularExpression), typeof(RegularExpressionAttributeAdapter)); public MyRegularExpression() : base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$") { }
}
}
要起作用,需要在global文件注册适配器
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MyRegularExpression), typeof(RegularExpressionAttributeAdapter));
自定义model:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcAjaxValidate.Models
{
public class DemoEntity
{
[Required(ErrorMessage = "*必填")]
public int id { get; set; } [StringLength(, ErrorMessage = "*长度小于10")]
//[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "必须邮箱")]
[MyRegularExpression(ErrorMessage = "必须邮箱")]
public string name { get; set; } // [Range(5, 10,ErrorMessage="5-10")]//数值,而不是长度 [StringLength(,ErrorMessage="最大5个字符")]
//[MinLength(2,ErrorMessage="最小2个字符")]//不起作用,改成正则形式
[RegularExpression(@"^.{2,}", ErrorMessage = "最小2个字符")]
[DataType(DataType.Password)]
public string password { get; set; } [DataType(DataType.Password)]
[Compare("password", ErrorMessage = "密码要一致")]
public string passwordRe { get; set; }
}
}
controller action
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcAjaxValidate.Models; namespace MvcAjaxValidate.Controllers
{
public class DemoEntityController : Controller
{
//
// GET: /DemoEntity/ public ActionResult create(DemoEntity demo)
{
if (ModelState.IsValid)
{ }
return View();
} }
}
view(create强类型视图)
@model MvcAjaxValidate.Models.DemoEntity
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>create</title>
</head>
<body>
<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script>
function complete() {
alert()
}
</script>
@using (Ajax.BeginForm("create", new AjaxOptions() {HttpMethod="post", Confirm="ok?" , OnComplete="complete"}))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>DemoEntity</legend>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.password)
@Html.ValidationMessageFor(model => model.password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.passwordRe)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.passwordRe)
@Html.ValidationMessageFor(model => model.passwordRe)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</body>
</html>
二,常为ef自动生成实体类采用伙伴类的技术验证
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;//...
using System.Linq;
using System.Web; namespace MvcAjaxValidate.Models
{ //伙伴类的技术,共享源数据信息
//防止ef实体修改后,标签出被冲掉,我们换一个地方写。ef变 标签写到外面了,就不会丢了
//让实体类和目标类共享信息,在这个类的所有属性,目标类就会有
//这个类和目标类属性名一样哦
//实体类和目标类要在一个命名空间!!!!!!!!!!!!!!!!
[MetadataType(typeof(MetaTypeShare))]
public partial class UserInfor
{ }
//目标类
public class MetaTypeShare
{
public int ID { get; set; }
[Required(ErrorMessage="必填")]
public string UName { get; set; }
public string UPassword { get; set; }
public Nullable<System.DateTime> USubTime { get; set; }
public Nullable<System.DateTime> ULastMoltifyTime { get; set; }
public Nullable<System.DateTime> ULastLoginTime { get; set; }
public string UEmail { get; set; }
public string UAddress { get; set; }
public string UPhone { get; set; }
public string URemark { get; set; }
public Nullable<short> Usex { get; set; }
public Nullable<short> UDelFlag { get; set; }
public Nullable<int> UErrorCount { get; set; }
} }
ASP.NET MVC4系列验证机制、伙伴类共享源数据信息(数据注解和验证)的更多相关文章
- 【ASP.NET MVC系列】浅谈数据注解和验证
[ASP.NET MVC系列]浅谈数据注解和验证 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google C ...
- ASP.NET CORE系列【六】Entity Framework Core 之数据迁移
原文:ASP.NET CORE系列[六]Entity Framework Core 之数据迁移 前言 最近打算用.NET Core写一份简单的后台系统,来练练手 然后又用到了Entity Framew ...
- asp.net mvc常用的数据注解和验证以及entity framework数据映射
终于有时间整理一下asp.net mvc 和 entity framework 方面的素材了. 闲话少说,步入正题: 下面是model层的管理员信息表,也是大伙比较常用到的,看看下面的代码大伙应该不会 ...
- MVC中的数据注解和验证
数据注解和验证 用户输入验证在客户端浏览器中需要执行验证逻辑. 在客户端也需要执行. 注解是一种通用机制, 可以用来向框架注入元数据, 同时, 框架不只驱动元数据的验证, 还可以在生成显示和编辑模型的 ...
- MVC5 数据注解和验证
①利用数据注解进行验证 ②创建自定义的验证逻辑 ③模型元数据注解的用法 ①先创建数据源 1,创建我们的Model Order 2,创建控制器带EF 选择模型为Order 当你运行的时候会报错,需要代 ...
- MVC学习手册之数据注解与验证
MVC学习手册之数据注解与验证 新建一个MVC5的WEB应用程序,VS2013会自动生成一段代码,以下是Account控制器下Register.cshtml 页面的代码: @model WebAppl ...
- 数据注解和验证 – ASP.NET MVC 4 系列
不仅在客户端浏览器中需要执行验证逻辑,在服务器端也需要执行.客户端验证能即时给出一个错误反馈(阻止请求发送至服务器),是时下 Web 应用程序所期望的特性.服务器端验证,主要是因为来自网 ...
- ASP.NET MVC5----常见的数据注解和验证
只要一直走,慢点又何妨. 在使用MVC模式进行开发时,数据注解是经常使用的(模型之上操作),下面是我看书整理的一些常见的用法. 什么是验证,数据注解 验证 从全局来看,发现逻辑仅是整个验证的很小的一部 ...
- Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图
目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net ...
随机推荐
- Android之Activity框架
在安卓应用中,经常需要Activity中经常需要有大量相似的Activity类,这些类往往有相似的结构与功能,因此产生了大量重复代码,为此,以下提供一种方法有效的降低了代码冗余. 定义Activity ...
- MySQL和PHP基础考试错题回顾
13.关于exit( )与die( )的说法正确的是( B) C A.当exit( )函数执行会停止执行下面的脚本,而die()无法做到 B.当die()函数执行会停止执行下面的脚本,而exit( ) ...
- 什么才是程序员的核心竞争力?zz
原文出处: 知乎 姚冬的观点 学习能力,尤其是自学能力,你啥时看到那些有名的程序高手在论坛上问“学习 XX 该看什么书,如何快速学习 XXX,学习 XXX 有什么代码推荐”之类的问题,他们想学什么很快 ...
- Sql server之路 (四)添加本地数据库MDF文件
安装环境 VS2008 Vs2008 Sp1 安装系统 Win8 1.创建窗体 右键添加新项 上一步 上一步 点击确定 双击Database1.mdf文件 在列名出填写字段名 保存 Ctrl+S 点 ...
- hdu 1281 二分图匹配
题目:在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下.但是某些格子若不放子,就 无法保证放尽量多的“车”,这样的格子被称做重要点 ...
- ubuntu su 密码 (转)
Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给roo ...
- codeforces Round #263(div2) D. Appleman and Tree 树形dp
题意: 给出一棵树,每个节点都被标记了黑或白色,要求把这棵树的其中k条变切换,划分成k+1棵子树,每颗子树必须有1个黑色节点,求有多少种划分方法. 题解: 树形dp dp[x][0]表示是以x为根的树 ...
- VMware Workstation卸载清理批处理命令
echo offclsecho "flag">>%windir%\system32\test.logif not exist %windir%\system32\tes ...
- JAVA中操作符的优先级
一元数学比较有逻辑 三元赋值就可以! 一元操作符 数学操作符 比较操作符 逻辑操作符 三元操作符 赋值操作符
- 关于hive的str_to_map
我之前用的是有问题的... 应该是这样用: str_to_map('a=b c=d f=e',' ','=') 这样就会拆成map,等号前面是key,后面是value