专栏首页漫漫全栈路ASP.NET MVC 页面校验和区域

ASP.NET MVC 页面校验和区域

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

校验

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

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

具体步骤分为两步:

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

先来创建类,作为Model

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 指定错误信息
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)

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

@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 方法来注册路由。

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "UserManage_default",
        "UserManage/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 简单介绍下modJS

    近期把团队的项目构建迁移到fis3,同时把模块加载器也由之前的requirejs切换到了modJS。

    IMWeb前端团队
  • 使用Unity3D提取王者荣耀英雄模型 VR资源

    我玩儿王者荣耀的时候,看到大乔的建模非常漂亮,于是想提取出来研究一下。搜索网上发现只有在各个网站出售的提取好了的模型,需要用各种币购买,以及注册等非常麻烦。所...

    bering
  • 4.2.Java8 Stream简单的应用

            元素序列:像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值,因为集合是数据结构,所以他的主要目的是以特定的时间/空间复杂度存储和...

    itjim
  • Electron 打包优化 - 从 393MB 到 161MB

    在 上一篇(你不知道的 Electron (二):了解 Electron 打包) 中对 Electron 应用是如何被打包成可执行文件进行了简单的介绍,并且谈到...

    IMWeb前端团队
  • 10年来积累的人工智能、机器视觉网站,速速收藏!

    CV视觉网这篇文章,分享10年来积累的人工智能、机器视觉相关网站,收藏起来,传播给同行。我也不藏着掖着了,自认为还是有一定分享贡献精神的,这篇文章的网址对从事这...

    小白学视觉
  • 为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法

    来源:juejin.im/post/5d10e52ee51d454f6f16ec11

    乔戈里
  • React-Redux 源码分析(三) -- connect

    主要的核心在于connect,下面通过一个简化版的connect来说下它的主要作用。

    IMWeb前端团队
  • AS3程序员小福利--as3js介绍及FlashDevelop工程的配置

    AS3JS是ActionScript 3.0到JavaScript的转换器,它基本上可以让你使用ActionScript 3.0语言编写客户端和服务器端Java...

    IMWeb前端团队
  • 你不知道的 Electron (二):了解 Electron 打包

    我们知道 Electron 提供了一个类似浏览器,但有更多权限的环境来运行我们的网页,那么 Electron 是怎么做到将我们的网页代码打包成一个可执行程序的呢...

    IMWeb前端团队
  • tf.compat.v1.get_default_session

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇

扫码关注云+社区

领取腾讯云代金券