MVC经常使用特性使用

简介

在之前的文章中,我和你们讨论如何用SingalR和数据库通知来完成一个消息监控应用。html

在上一篇文章中,我介绍了如何在MVC中对MongoDB进行CRUD操做。web

今天,我将继续介绍一些在开发中很是有用的MVC特性,以下:数据库

  1. BindAttribute
  2. Remote
  3. HandleError
  4. HiddenInput

BindAttribute

使用BindAttribute的目的是限制用户在提交form表单时使用合适且正确的值。当咱们提交一个表单时,就会检查每个实体上绑定的特性。浏览器

假设咱们已经有下面一个Employee实体类:ide

  1. public class Employee
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public string Address { get; set; }
        public string PhoneNo { get; set; }
    }

    创建一个EmployeeController,里面添加两个Action:工具

  1. [HttpGet]
    public ActionResult EmployeeRegister()
      {
        return View();
      }
     [HttpPost]
    public ActionResult EmployeeRegister(Employee emp)
      {
        return View();
      }

给第一个Action创建视图:spa

运行这个应用,填写注册表单:翻译

若是咱们提交表单,在第二个Action中,咱们会获得下面的值:3d

如今若是咱们只想提交Email,Name和PhoneNo,而咱们不想提交地址,这时咱们能够在实体类上添加以下特性:code

[Bind(Exclude="Address")]
   public class Employee
   {
       public string Name { get; set; }
       public string Email { get; set; }
       public string Address { get; set; }
       public string PhoneNo { get; set; }
   }
  1. BindAttribute要在System.Web.Mvc命名空间下使用,使用BindAttribute,咱们能够在提交表单时对字段进行一些控制。在下面的图中,咱们已经在提交的form数据中得不到Address的值了。

咱们也能够将BindAttribute直接用在Action的参数中,像下面这样:

Remote Attribute

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

咱们能够在下面的例子中使用RemoteAttribute:

  1. public class Employee
    {
        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; }
    }

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

  1. public JsonResult CheckEmail(string Email)
      {
          //Check here in database if it exist in database return true else false.
          return Json(false, JsonRequestBehavior.AllowGet);
      }

下面是执行效果:

HandleError Attribute

咱们已经有不少方法在MVC中处理异常,好比用try catch,或者使用Filter,或者经过第三方库好比elmah。可是MVC也提供了一个HandleErrorAttribute去处理异常,以下:

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

在web.config文件中,咱们添加以下两行:

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

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

咱们也可使用HandleErrorAttribute给不一样类型的异常显示不一样的视图页面。

  1. [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特性。

  1. 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 在实体字段上多了一些额外的控制。

总结

本人英语四级考了五次都未经过(重在参与),目前仍是三级水准,这篇文章是我第一次翻译,也没有借助翻译工具,仅凭本身的理解,只想将更多国外的新鲜知识和你们分享。若是翻译的很差还请各位看官多多包含,若是翻译的还行,请给小弟弟我一个推荐吧,以给小弟弟我继续翻译的动力。

 

原文连接:http://www.codeproject.com/Tips/1032266/MVC-Attributes

相关文章
相关标签/搜索