最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。

十年河东十年河西,莫欺少年穷

学无止境,精益求精

   最近在做自学MVC,遇到的问题很多,索性一点点总结下。

MVC4数据验证:

本例以程序为例就行说明:

public class MyModel
{
[Required(ErrorMessage = "请输入收件人姓名")]
public string Uname { get; set; } [Required(ErrorMessage = "请输入收货人手机号")]
[RegularExpression(@"^1[3458][0-9]{9}$", ErrorMessage = "手机号格式不正确")]
public string UMoblie { get; set; } [Required(ErrorMessage = "请选择所属省份")]
public string cmbProvince { get; set; } [Required(ErrorMessage = "请选择所属市/县")]
public string cmbCity { get; set; } [Required(ErrorMessage = "请选择所属区域")]
public string cmbArea { get; set; } public int moren { get; set; }
public string postnum { get; set; } [Required(ErrorMessage = "请填写详细地址")]
public string AddressInfo { get; set; } [RegularExpression(@"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$", ErrorMessage = "请输入正确的电子邮箱地址")]
public string Email { get; set; } [StringLength(, ErrorMessage = "身份证格式不正确!")]
public string cardNum { get; set; }//中国身份证号 18位 [StringLength(, MinimumLength = , ErrorMessage = "密码长度应在6~18位之间")]
[System.ComponentModel.DataAnnotations.Compare("ConfimPassWords")]//二次输入密码必须和上次相同
public string NewPassWords { get; set; }//密码长度 6~16位 [DataType(DataType.Password)]
[StringLength(, MinimumLength = , ErrorMessage = "密码长度应在6~18位之间")]
[System.ComponentModel.DataAnnotations.Compare("NewPassWords")]//二次输入密码必须和上次相同
public string ConfimPassWords { get; set; }//密码长度 6~16位 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
public decimal money { get; set; }// DisplayFormat特性可以用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。 [ReadOnly(true)]
public decimal Price { get; set; }//表示只读的 不可修改 [Range(, )]
public int Age { get; set; }//年龄范围 // order 控制字段属性的顺序
[Required]
[StringLength()]
[Display(Name = "Last Name", Order = )]
public string LastName { get; set; }
[Required]
[StringLength(, MinimumLength = )]
[Display(Name = "First Name", Order = )]
public string FirstName { get; set; }
}

MVC特性,本篇主要讲解:Exclude、Include、Remote、HandleError、HiddenInput

表单提交中,如果我们不想提交某些属性,我们可以使用Exclude特性来声明

表单提交中,如果我们仅仅只提交某些属性,我们可以使用Include特性来声明

例如我们有如下Model

[Bind(Exclude="Address")]//在类上边进行声明,则针对所有引用该类的Action方法有效
public class Employee
{
public string Name { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string PhoneNo { get; set; }
}

提交表单时,我们不提交Address,那么在Action方法中,我们获取不到Address的值,如下所示:

当然,如果我们不是针对所有方法,而是仅仅针对一个方法,那么我们可以将特性写在方法上,如下所示:

除了上述:[Bind(Exclude="Address")]进行声明,我们也可以使用Include进行声明:

 [Bind(Include = "Name,Email,PhoneNo")]//在类上边进行声明,则针对所有引用该类的Action方法有效
public class Employee
{
public string Name { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string PhoneNo { get; set; }
}

 Remote特性讲解

假设我们有一个注册表单,里面有邮箱文本框,当输入邮箱后,我们想检查输入的邮箱是否在数据库中已经存在,如果存在,则不提交表单,这时我们可以使用RemoteAttribute,通过RemoteAttribute,我们可以在不用提交表单就可以先进行一些服务端验证。

我们可以在下面的例子中使用RemoteAttribute:

[Required]
[Remote("CheckUserName", "Home")]
public string UserName
{
get;
set;
}

RemoteAttribute的第一个参数是一个Action名字,第二个是Controller名字,第三个是如果邮箱已存在后显示给用户看的提示信息。当我们输入完邮箱后,CheckEmail方法将被执行并检查邮箱是否存在。

public JsonResult CheckUserName(string UserName)
{
bool result = true;
if (UserName == "admin")
{
result = false;
}
return Json(result,JsonRequestBehavior.AllowGet);
}

HandleError讲解如下:

我们已经有很多方法在MVC中处理异常,比如用try catch,或者使用Filter,或者通过第三方库比如elmah。但是MVC也提供了一个HandleErrorAttribute去处理异常,如下:

[HandleError()]
public ActionResult CheckError()
{
int a = 10;
int b = 0;
int k = a / b;
return View();
}

在web.config文件中,我们添加如下两行:

<customErrors mode ="On" defaultRedirect ="Error.cshtml">
</customErrors>

在shared文件夹下创建一个视图Error.cshtml,然后运行程序,如果运行上面的CheckError()方法,你刚创建的Error.cshtml将会显示出来。

我们也可以使用HandleErrorAttribute给不同类型的异常显示不同的视图页面。

[HandleError(ExceptionType=typeof(DivideByZeroException),View="DivideByZeroErrorView")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "NullRefrenceErrorView")]
public ActionResult CheckError()
{
int a = 10;
int b = 0;
int k = a / b;
return View();
}

HiddenInput Attribute

如果我们想对用户隐藏一些实体字段,我们可以使用HiddenInput特性。

public class Employee
{
[HiddenInput(DisplayValue=false)]
public string Name { get; set; }
[Remote("CheckEmail","Employee",ErrorMessage="Email is already exist")]
public string Email { get; set; }
public string Address { get; set; }
public string PhoneNo { get; set; }
}

在以上的实体中,我用HiddenInput特性去描述Name字段。这样程序运行后在浏览器中Name字段将不在显示。因此HiddenInput给我们d 在实体字段上多了一些额外的控制。

C# 自动属性:

在 C# 3.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁。

下面示例演示了属性的标准实现和自动实现:

class Program {
class Person {
//标准实现的属性
int _age;
public int Age {
get { return _age; }
set {
if (value < || value > ) {
Console.WriteLine("设置的年龄有误!");
return;
}
_age = value;
}
} //自动实现的属性
public string Name { get; set; }
} static void Main(string[] args) {
Person p = new Person();
p.Age = ;
p.Name = "小王";
Console.WriteLine("{0}今年{1}岁。",p.Name,p.Age);
Console.ReadKey();
}
}

上面的自动属性是控制年龄的范围,很简单!

再如我写的自动截取字符串长度的属性

 /// <summary>
/// 积分榜
/// </summary>
public partial class YX_weiUserJF
{
private string nickName; public string NickName
{
get { return nickName; }
set
{
nickName = value;
if (CommonMethod.GetStringLenth(nickName) > )
{
//当昵称长度大于16位时,进行截取前两位+ ... +后两位
nickName = nickName.Substring(, ) + "..." + nickName.Substring(nickName.Length - , );
}
}
}
private int score;
public int Score
{
get { return score; }
set
{
score = value;
}
} }

好了,就这么多,很简单吧!

参考:MVC常用特性使用

@陈卧龙的博客

MVC4 数据验证、特性、自动属性总结的更多相关文章

  1. .NET MVC4 数据验证Model(二)

      一.概述 MVC分为ViewModel.Control.View,对数据的封装MVC做的很好,确实是不错的WEB框架,针对MVC的ViewModel封装的也是相当的不错,最近做一个MVC的项目,采 ...

  2. Silverlight实例教程 - Validation数据验证基础属性和事件(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

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

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

  4. MVC 3 数据验证 Model Validation 详解

    在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的 ...

  5. (转)MVC 3 数据验证 Model Validation 详解

    继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3 ...

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

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

  7. 【MVC】ASP.NET MVC之数据验证

    前端传到后端数据的不可信任性,DRY("Don't Repeat Yourself") 设计原则.MVC3.0出了后端数据验证特性,鼓励你只定义一次功能或行为,然后在应用程序中各处 ...

  8. C#基础(202)--类定义,字段与属性,自动属性,方法及常见错误

    c#类的定义规范 字段与属性的比较: 字段: 字段主要是为类的内部做数据交换交互使用,字段一般是private 字段可以赋值,也可以取值 当字段需要为外部数据提供数据的时候,请将字段封装为属性,而不是 ...

  9. .NET MVC中的数据验证

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

随机推荐

  1. PHP 中和 HTTP 相关的函数及使用

    ① get_headers 方法:取得服务器响应一个 HTTP 请求所发送的所有标头 例如: <?php $httpinfo = get_headers('http://www.baidu.co ...

  2. mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干

    1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...

  3. Java的访问控制

       类内部  本包(实例.类变量和方法)  子类(任何位置) 外部包(实例.类变量和方法) public    √  √  √  √ protected   √  √  √  × default  ...

  4. NSQ部署

    一.      简介 NSQ主要有三个主要程序和一个Web服务程序: nsqd:是守护进程,接收,缓存,并投递消息给客户端 nsqlookupd:是一个守护进程,为消费者提供运行时发现服务,来查找指定 ...

  5. [daily][device][bluetooth] 蓝牙怎么办!(archlinux下驱动蓝牙鼠标,以及三星手机)

    去年地摊买的破无线鼠标坏掉了.看上微软的Designer Mouse蓝牙鼠,但是买之前我要确认我能不能驱起来. 这款鼠标只支持蓝牙4.0.系统支持windows8以上,不支持xp和windows7. ...

  6. [daily][device] linux挂载iphone

    头几个月去旅游,亲戚的iphone照了好多照片,空间不足.就备份在了我的电脑上. 那么问题就是如何在linux系统里挂载iphone? 我找到了这篇文档,然而我没看. https://wiki.arc ...

  7. PHP 依赖注入 (转)

    说这个话题之前先讲一个比较高端的思想--'依赖倒置原则' "依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高 ...

  8. C/C++链表操作(面试)

    1.为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3 ...

  9. Popwindow自定义动画(nexus5不支持暂未解决)

    遇到一个问题,先记录一下 PopWindow自定义动画 import android.app.Activity; import android.graphics.drawable.BitmapDraw ...

  10. HTTP 协议的历史演变和设计思路

    HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...