前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET MVC 页面校验和区域

ASP.NET MVC 页面校验和区域

作者头像
李郑
发布2019-12-11 17:54:13
1.3K0
发布2019-12-11 17:54:13
举报
文章被收录于专栏:漫漫全栈路漫漫全栈路

两个内容较少的point,放在一起说一下。

校验

通常来说,web项目通常使用前后端混合校验,使用诸如:Bootstrap Validator,jquery.validate.js,配合 MVC框架来做校验则。

其实不论是前端校验还是后端校验,亦或是混合校验,都是为了避免用户输入异常的数据,导致程序出错或数据非法,同时规避Sql注入和反爬虫等等。在保证数据和信息的安全性的同时,也要考虑用户体验,大量的数据输入限制,同时也会影响用户对系统的体验。

具体步骤分为两步:

  1. MVC 的 HtmlHelper 提供了一个 Html.ValidationMessageFor() 的方法来显示校验信息,也可以用 Html.ValidationSummary() 统一显示。
  2. 在点击提交按钮后,转到后端 Action ,使用 ModelState.IsVaild() 判断前端验证是否成功,如果返回true 表示验证成功。

先来创建类,作为Model

代码语言:javascript
复制
public class User
{
    public int Uid { get; set; }
    public string Uname { get; set; }
    public string Upass { get; set; }
}

.Net框架中 System.ComponetModel.DataAnnotations命名空间包括了很多内置的验证特性,用于修饰属性,列举几个常用项:

  • [Required] 必须的
  • [StringLength] 限制长度
  • [Range] 范围
  • [RegularExpression] 正则表达式
  • 属性 ErrorMessage 指定错误信息
代码语言:javascript
复制
public class User
{
    [Required(ErrorMessage ="Uid不能为空?")]
    [Range(1,999,ErrorMessage ="Uid不在合理范围内(1-999)?")]
    public int Uid { get; set; }
    public string Uname { get; set; }
    public string Upass { get; set; }
}

全部方法属性可以查看 DataAnnotations 命名空间.aspx)

然后在视图中创建一个表单用于提交和验证:

代码语言:javascript
复制
@model STU_mvc.Models.User
@{
    ViewBag.Title = "Add";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<h2>Add</h2>

@using (Html.BeginForm("Add", "User", FormMethod.Post))
{
    <span>Uid: </span> @Html.TextBoxFor(u => u.Uid) @Html.ValidationMessageFor(u => u.Uid) <br />
    <span>Name: </span>@Html.TextBoxFor(u => u.Uname) @Html.ValidationMessageFor(u => u.Uname) <br />
    <span>Pass: </span>@Html.TextBoxFor(u => u.Upass) @Html.ValidationMessageFor(u => u.Upass)<br. />
    <input type="submit" name="reg" value="Registered" />

}

这里引用了已经封装好的 jQuery.validate 插件,及其异步版本。

控制器中的方法此处略过。

区域

区域的意义在于,当项目结构过于复杂之后,使用区域分层,将项目结构进行优化。

直接选中当前的项目,右键添加区域。

区域实际上是将MVC拆分成了不同的子模块,每个模块都有自己的MVC。

重点说一下区域的路由注册,在创建一个区域后,会自动生成一个 区域名+AreaRegistration.cs 的文件,他会重写 RegisterArea 方法来注册路由。

代码语言:javascript
复制
public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "UserManage_default",
        "UserManage/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

注意:此时,根目录下的Global.asax文件中,可以看到,在原路由注册之前,新增了一行:AreaRegistration.RegisterAllAreas(); 因此,区域路由的匹配优先级是高于默认路由的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 校验
  • 区域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档