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中添加
<customErrors mode = "On" defaultRedirect = "Error.cshtml"></customErrors>
//在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 {})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容