10、ASP.NET MVC入门到精通——Model(模型)和验证

简介:

本系列目录:ASP.NET MVC4入门到精通系列目录汇总

模型就是处理业务,想要保存、创建、更新、删除的对象。

注解(通过特性实现)

  • DisplayName
  • Required
  • StringLength(20,MinimumLength=2)
  • DataType(System.ComponentModel.DataAnnotations.DataType.MultilineText)
  • RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$",ErrorMessage="邮箱格式不对!")

.Net MVC请求处理流

请求→IIS→Runtime→Controller→Action → ViewResult(:ActionResult).ExcuteResult()→ RazorView(:IView).RenderView→Response

请求都归结到Action上,所以是Url驱动

Action跟View是松耦合

所有的页面继承在viewpage类

View模板显示页面的规则:先找对于的Controller文件夹,再找对应的Shared文件夹

包括数据、验证规则、数据访问和业务逻辑等应用程序信息它是我们MVCWeb应用的主框架

Model调用的是我们的业务逻辑层

Model作为ViewModel使用的情况

Model是独立的组件,不知道View和Controller的存在

MVC验证

System.ComponentModel.DataAnnotations

定义验证规则:

Model属性添加内置验证特性,介绍用的最多的其中的四个:

    [Required], [StringLength], [Range], 和 [RegularExpression]

[StringLength(10,ErrorMessage="长度限制!")]
       public string LoginName { get; set; }

定义自己的定制验证特性,然后应用它们。你可以通过继承自System.ComponentModel.DataAnnotations命名空间中 的ValidationAttribute基类,定义完全定制的特性。

复制代码
public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute()
            :base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")
        {
        }
    }
复制代码

Model

        [Email]
        public string Email { get; set; }

View

1
< div >@Html.LabelFor(x=>x.Email):@Html.TextBoxFor(x=>x.Email)@Html.ValidationMessageFor(x=>x.Email)</ div >

 效果:

客户端验证

1.引入JS脚本支持

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

2.添加语句
    @{Html.EnableClientValidation(true);}(MVC3+版本中默认开启)

服务器端验证

1.控制器中使用:ModelState.IsValid 判断是否通过验证

DataModel验证

MetadataTypeAttribute Class
为数据实体的partial class添加额外的元数据验证信息
使用步骤:
创建data-model partial class
创建关联的metadata class.
将metadata class关联到具体的数据实体类
使用的注意事项:
标签只能打到一个类上
此标签不能被继承
使用示例:

复制代码
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace MvcApplication.Models
{
    public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute()
            : base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")
        {
        }
    }
    [MetadataType(typeof(UserMetadata))]
    public partial class User
    {
        public string UserName { get; set; }
        public string Remark { get; set; }
        public string Age { get; set; }
        public string Pwd { get; set; }
        public string RePwd { get; set; }
        public string Email { get; set; }
    }
    //1.为实体类添加特性DisplayName
    public class UserMetadata
    {
        [DisplayName("用户名")]
        [Remote("NotExitesDdata", "Home")]
        public string UserName { get; set; }
        /// <summary>
        /// 1.在实体类中为Remark属性设置DataType特性,指定为多行文本框
        /// </summary>
        [DataType(DataType.MultilineText)]
        [DisplayName("备注")]
        public string Remark { get; set; }
        [DisplayName("年龄")]
        [Range(1,120)]
        public int Age { get; set; }
        [PasswordPropertyText]
        [DisplayName("密码")]
        public string Pwd { get; set; }
        [PasswordPropertyText]
        [DisplayName("重输密码")]
        [System.Web.Mvc.Compare("Pwd")]
        public string RePwd { get; set; }
        [Email]
        public string Email { get; set; }
    }
}
复制代码

 另外提到一点,模型里面我在用户名属性上面添加了一个Remote特性,这个是一个异步调用的属性,可以指定触发某个action,返回值为bool(true or false),比如注册用户时,可用于验证用户名是否存在。

Controller

        public JsonResult NotExitesDdata()
        {
            string UserName = Request.Params["UserName"];
            return UserName == "123" ? Json(true,JsonRequestBehavior.AllowGet) : Json(false,JsonRequestBehavior.AllowGet);
        }

效果:

本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/4821497.html,如需转载请自行联系原作者

相关文章
|
9月前
|
前端开发 IDE Java
Spring MVC 中因导入错误的 Model 类报错问题解析
在 Spring MVC 或 Spring Boot 开发中,若导入错误的 `Model` 类(如 `ch.qos.logback.core.model.Model`),会导致无法解析 `addAttribute` 方法的错误。正确类应为 `org.springframework.ui.Model`。此问题通常因 IDE 自动导入错误类引起。解决方法包括:删除错误导入、添加正确包路径、验证依赖及清理缓存。确保代码中正确使用 Spring 提供的 `Model` 接口以实现前后端数据传递。
311 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
255 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
296 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
237 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
411 0
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
499 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
477 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
379 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
275 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
490 0