ASP.NET MVC特性

ASP.NET MVC的特性

  • BindAttribute
    限制实体属性,使用BindAttribute的目的是限制用户在提交Form表单时使用合适且正确的值,当提交表单时,会检查每个实体上绑定的特性。BindAttribute位于System.Web.Mvc命名空间下。
// 创建User实体类
[Bind(Exclude="Phone")] //提交User时不提交Phone字段,Phone默认会为null。
public class User
{
  public string UserName {get; set;}
  public string Email {get; set;}
  public string Phone{get; set;}
}
//创建User控制器添加Action
[HttpGet]
public ActionResult Create(){
  return View();
}
[HttpPost]
public ActionResult Create([Bind(Exclude="Phone")]User entity){
  return View();
}
  • RemoteAttribute
    远程验证,需要页面使用 jquery.validate.js和jquery.validate.unobtrusive.js。
    场景:注册表单中有邮箱,当输入邮箱后要检查是否在数据库已经存在。若存在则不提交表单,可使用RemoteAttribute,通过RemoteAttribute可在进入Action前自动线进行服务端验证。
[Remote(ActionName, ControllerName, ErrorMessage)]
// 实体类
public class User
{
  public string UserName{get;set;}
  [Remote("CheckEmail", "User", ErrorMessage = "邮箱已存在")]
  public strign Email{get;set;}
}
//控制器方法
public JsonResult CheckEmail(string Email)
{
  return Json(false, JsonRequestBehavior.AllowGet);
}
// 页面邮箱输入框一旦发生onchange会自动发送异步请求到CheckEmail
@Html.ValidationMessageFor(model=>model.Email, "", new {@class="text-danger"})
  • HandleErrorAttribute
    根据异常类型直接跳转到相应的错误页面,虽然在ASP.NET MVC处理异常的方式有try...catchFilter、第三方库如elmah。ASP.NET MVC也提供了一个HandleErrorAttribute去处理异常。
[HandleError()]
public ActionResult CheckError()
{
  return View();
}
//在Web.config中添加

//在shared目录下添加视图Error.cshtml
// 根据异常类型的跳转到不同的错误页面
[HandleError(ExceptionType = typeof(DivideByZeroException), View = "DivideByZeroError.cshtml")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "NullReferenceError.cshtml")]
public ActionResult CheckError()
{
  return View();
}

重写该特性进行错误日志记录时,调用方式有两种:

  1. global 全局注册
  2. 添加到控制器或动作上

使用HandleErrorAttribute局限

  1. 不支持Exception记录
  2. 无法捕捉到500之外的HttpException
  3. Controller之外抛出的异常无法处理
  4. AJAX调用出现Exception时会将错误页面内容返回
  • HiddenInputAttribute
    在Model中直接控制页面输入框显示,若想对用户隐藏一些实体字段,可使用HiddenInput特性。
//实体类
public class User
{
  [HiddenInput(DisplayValue=false)]
  public string UserName{get;set;}
  [Remote("CheckEmail", "User", ErrorMessage="Email is already exists")]
  public string Email{get;set;};
}
//视图
@Html.EditorFor(model=>model.UserName, new {})

你可能感兴趣的:(ASP.NET MVC特性)