mvc中动态给一个Model类的属性设置验证

掌握ASP.NET MVC5:实现登录验证的完整教程 ASP.NET MVC5是Microsoft推出的一种用于构建Web应用程序的框架,其将模型(Model)、视图(View)和控制器(Controller)的概念紧密结合,以实现清晰、易于管理的应用程序结构。这一框架遵循MVC设计模式,可以将应用程序逻辑与用户界面分离,从而提高应用程序的可测试性和可维护性。LINQ to Entities是一种允许开发者使用.NET语言来查询数据库的技术。 阅读详情

在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这样的验证毕竟功能有限,那么就需要我们自己进行定制验证。

假设有Model类:class Dinners{

private string Title;
  
  private System.DateTime EventDate;
  
  private string Description;
  
  private string HostedBy;
  
  private string ContactPhone;
  
  private string Address;
  
  private string Country;
  
  private double Latitude;
  
  private double Longitude;

}

这里需要对该类的每个属性都加上不可为空的约束,并对电话号码、日期做验证。代码如下:

public partial class Dinners
    {


        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(Title))
            {
                yield return new RuleViolation("Title required", "Title");
            }
            if (String.IsNullOrEmpty(Description))
            {
                yield return new RuleViolation("Description required", "Description");
            }
            if (String.IsNullOrEmpty(HostedBy))
            {
                yield return new RuleViolation("HostedBy required", "HostedBy");
            }
            if (String.IsNullOrEmpty(Address))
            {
                yield return new RuleViolation("Address required", "Address");
            }
            if (String.IsNullOrEmpty(Country))
            {
                yield return new RuleViolation("Country required", "Country");
            }
            if (String.IsNullOrEmpty(ContactPhone))
            {
                yield return new RuleViolation("Phone# required", "ContactPhone");
            }

            //这里引用了类PhoneValidator(自定义验证类,不再详述)
            if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
            {
                yield return new RuleViolation("Phone# does not match country", "ContactPhone");
            }
            yield break;
        }

        partial void OnValidate(ChangeAction action)
        {
            if (!IsValid)
            {
                throw new ApplicationException("Rule violations prevent saving");
            }
        }
    }


    public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }

        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage = errorMessage;
            PropertyName = propertyName;
        }
    }

 

前台验证代码:

 <h2>Edit Dinner</h2>
    <%=Html.ValidationSummary("Please crrect the errors and try again.") %>
    <% using (Html.BeginForm()) {%>
       
        <fieldset>
            <p>
                <label for="Title">Dinner Title:</label>
                <%=Html.TextBox("Title") %>
                <%=Html.ValidationMessage("Title","*") %>
            </p>
            <p>
                <label for="EventDate">EventDate:</label>
                <%=Html.TextBox("EventDate",string.Format("{0:g}",Model.EventDate)) %>
                <%=Html.ValidationMessage("EventDate","*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%=Html.TextArea("Description") %>
                <%=Html.ValidationMessage("Description","*") %>
            </p>
            <p>
                <label for="Address">Address:</label>
                <%=Html.TextArea("Address") %>
                <%=Html.ValidationMessage("Address","*") %>
            </p>
            <p>
                <label for="Country">Country:</label>
                <%=Html.TextBox("Country") %>
                <%=Html.ValidationMessage("Country","*") %>
            </p>
            <p>
                <label for="ContactPhone">ContactPhone #:</label>
                <%=Html.TextBox("ContactPhone") %>
                <%=Html.ValidationMessage("ContactPhone","*") %>
            </p>
            <p>
                <label for="Latitude">Latitude:</label>
                <%=Html.TextBox("Latitude") %>
                <%=Html.ValidationMessage("Latitude","*") %>
            </p>
            <p>
                <label for="Longitude">Longitude:</label>
                <%=Html.TextBox("Longitude") %>
                <%=Html.ValidationMessage("Longitude","*") %>
            </p>
            <p>
                <input type="submit" value="Save" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%= Html.ActionLink("Back to List", "Index") %>
    </div>

注:代码来自教程《一步一步学习asp.net mvc》

 

educoder实训——计算几何形状的表面积与体积 educoder python实训 阅读详情

相关推荐

基于Python的闲鱼商品价格评估模型:爬虫+价格预测全实现

本文介绍了一个完整的全球气候数据抓取与分析流程,采用轻量化的技术栈(requests+pandas+matplotlib+folium),实现以下核心功能: 全球城市定向抓取:支持自定义城市列表,自动获取经纬度并抓取多源气候数据 双数据源互补:结合OpenWeatherMap API(实时数据)和Climate-Data.org(历史数据) 全维度覆盖:采集气温、降水、湿度等核心指标,并进行自动化清洗转换 丰富可视化:生成热力图、趋势图和统计图表,支持地理定位展示 灵活扩展:模块化设计便于新增城市或扩展数据

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3049

.net mvc Model 验证总结

ASP.NET MVC4中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的。 我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC4框架帮我们完成验证。我以MVC4项目模板自带的登录 做例子讲解Model的验证。 一、启用客户端验证: 客户端验证主要是为了提高用户体验

dgdisme 2431

ENSP实验一:防火墙基础配置

配置client(内网)、FTP Server(外网)的IP地址。进入防火墙,输入密码:默认为admin@123。

Carohuan的博客 1万+

【ASP.NET】为ModelState添加扩展方法,实现指定字段验证

由自动生成的代码中,我们可以知道ModelState的用法,是存储模型验证结果的错误集合 常用用法,一个添加用户的例子 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(UserInfo userInfo) { if (ModelState.IsValid) { db.UserIn...

GreAmbWang的博客 691

@transactional滥用导致数据源连接池耗尽问题

@transactional滥用导致数据源连接池耗尽问题

qq_43205267的博客 1201

DLPFC.h5ad格式数据简便获取方式+STAGATE论文复现问题

简便获取DLPFC.h5ad格式的数据方式

apple_74057836的博客 2257

asp.net MVC - 小鸟系列之属性验证

.Net 4.0的 System.ComponentModel.DataAnnotations 命名空间中提供了如下所示的验证属性 StringLength:  字符串字段所允许的最大长度 Required:  必填字段 RegularExpression: 字段属性必须符合所指定的正则表达式 Range: 数字字段必须符合的范围 CustomValidation: 自定义字段验证规则

编程改变人生 662

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2187

C# MVC验证Model

.NET Core MVC3 数据模型验证的使用 这里我先粘贴一个已经加了数据验证的实体类PeopleModel,然后一一介绍。 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System...

weixin_34250709的博客 470

【视频编码学习】AVS3参考软件HPM-4.1简单配置运行

1、用Visual Studio2017打开HPM-4.1文件夹 2、找到文件夹目录下x86_windows文件夹,因为是在win上运行该代码 3、然后找到对应vs版本(我当时2017版)的解决方案sln文件,双击打开可以看到该解决方案下的全部项目。 4、重新生成解决方案时发现提示sdk版本问题,所以右键点击所有的项目,选择重定向项目,修改一下sdk版本。 ...

谦虚勤奋诚实感恩 3100

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 771

ASP.NET-MVC-模型注解验证

Required ——必填,如联系方式必填写 StringLength——验证长度,如验证密码必须为6位 RegularExpression——指定规则验证,如验证邮箱格式 Range——验证范围,如验证人的年龄为1-130之间 Compare——验证比较,如验证两次输入密码是否匹配 Remove——验证回调验证,如回调验证数据库中重复姓名 在ASP.NET MVC中,验证特性定义在System.ComponentModel.DataAnnotations命名空间中,因此我们在使用验证特性前,需要

qq_45262877的博客 1061

13、深入理解 Microsoft 365 的安全与合规概念

本文深入探讨了 Microsoft 365 的安全与合规概念,涵盖文档存储、文件共享、审计、保留、eDiscovery、分类和保护以及网络等多个关键方面。通过合理配置这些功能,组织可以更好地管理和保护其数据资源,满足法规要求,并提升工作效率。文章还提供了最佳实践建议及流程图,帮助读者全面理解 Microsoft 365 的安全架构和管理策略。

k8s6orchestrator的博客 212

mvc中js是如何调用HTML的,MVC中javascript直接调用Model

最近做一个统计页面, Model从后台已经获取了数据集合,想直接在前台展示,而这个展示是需要用js生成图表的.控制器部分代码:public ActionResult Index(){var model = _homeCountService.GetHomeCount();return View(model);}cshtml代码:var a = new Array();var b = new Arr...

weixin_39570505的博客 811

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Qt MVC架构介绍及相关model类详解

Qt中的MVC架构演化成更灵活的Model/View范式,通过模型(Model)、视图(View)和委托(Delegate)实现数据与UI分离。模型负责数据管理,继承自QAbstractItemModel;视图负责展示和交互,如QListView;委托处理渲染和编辑。常用模型类包括QStringListModel、QStandardItemModel和QSqlQueryModel等。该架构优势在于数据与UI解耦、高效变更通知和灵活定制,适用于数据库、编辑器等场景。开发者也可通过继承抽象基类实现自定义模型,满

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1723

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【MVC】TempData、ViewBag、ViewData、Model

   TempData ViewBag ViewData Model

刘亚男 883

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MVC5中Model设置属性注解

ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System.Compo...

weixin_30538029的博客 114

MVC5中Model层开发数据注解

ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System....

129

ASP.NET MVC 3 —— Model远程验证

这两天找了些ASP.NET MVC3的资料小看了一下,主要看了一下MVC3.0的一些新特性已经Razor视图引擎的一些东西,发现3.0真的比之前的两个版本进步很多,在开发体验上有了大大的提高!这两天看的和尝试的东西应该是比较浅显一点的,大致的内容有如下几个方面: Model验证的新特性(主要是从RemoteAttribute特性和IClientValidatable这两个新东西进行了解和

记事本 1054

把多种验证规则用到一个model上

基于标记特性的Model验证,真的太棒了,与jquery validate结合后激情四射,有木有,一句话完成前后端验证。简直让人秒爱... 但是爱是爱了,生活中总会有些小摩擦,这不问题来了:看图中那个Num,假如我在别处也要用到这个Test,但是Num的范围变了。哎呀怎么办呢,难道要重新建一个Test1吗... 其实解决这个问题不难,只要在上面再添加一个验证就可以了,然后在用到这...

diadun8740的博客 233

利用Attribute实现的 MVC动态表单

利用Attribute实现的 MVC动态表单 一、何谓动态表单 最近再做一个项目,运营只是初步确定了功能,再加上项目比较复杂,所以我不好确定数据库结构 我随时有可能在某个表中加一个属性… 这时候,如果我有2个页面,分别是 Create 和 Edit,那我就需要对这两个页面进行修改~ 如果是更多的页面怎么办? 那为何不根据Model,自动生成表单呢? 网...

weixin_30270889的博客 192

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。

qq_34358193的博客 1831

深入ASP.NET MVC Model验证-使用.NET验证特性类指定Mode验证规则

上一篇文章也有介绍使用验证特性类指定Mode验证规则,但是介绍的不是很详细,下面详细深入谈谈如何使用.NET内置验证特性类指定Mode验证规则及自定义符合自己的业务规则的验证特性类的方法。一、使用内置的.NET验证特性类在程序集 System.ComponentModel.DataAnnotations.dll, v4.0.0.0中为我们定义很多有用的验证特性类。最常用类如下:CompareAtt...

lxrj2008的专栏 1241

ASP.NET MVC4中的Model验证 移除指定验证信息

MVC中通过Model在页面间传值使的程序开发变得更加的快捷,但是很多时候,我们在数据传递的时候为了确保数据的有效性,要对Model的相关属性做基本的数据验证。 不多说直接上个代码,Model的实体类 public class BadDebt { public int DebtId { get; set; } ...

weixin_30650859的博客 185

【转载】ASP.NET MVC 3 —— Model远程验证

这两天找了些ASP.NET MVC3的资料小看了一下,主要看了一下MVC3.0的一些新特性已经Razor视图引擎的一些东西,发现3.0真的比之前的两个版本进步很多,在开发体验上有了大大的提高!这两天看的和尝试的东西应该是比较浅显一点的,大致的内容有如下几个方面: Model验证的新特性(主要是从RemoteAttribute特性和IClientValidatable这两个新东西进行了解和尝试使用...

weixin_34015860的博客 112
上一篇: MVC中HTML表单操作
下一篇: mvc中的UpdateModel方法
mx5721
博客等级 码龄17年 24粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值