关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解。也可能很多人都在Scott Guthrie等人写的一本《ASP.NET MVC 1.0》书中,见过NerdDinner项目中对Dinner对象修改和添加的时的数据验证。但有许多封装的地方,不知道是怎样的工作原理,今天研究了,拿出来给大家分享一下。
数据库还是上一篇blog中的库与表,同样的方法来创建news表的实体类,在自动生成的news这个实体类中,我们发现有一个特殊的分部方法:
partial void OnValidate(System.Data.Linq.ChangeAction action);<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
这个方法没有实现,我们根据C#的语法知道,如果分部类中的分部方法,没有实现的话,调用和定议的地方都不会起什么作用。现在,我们要去完善这个方法,让它“用”起来。
首先,人产在Models中创建news类的另一部分,代码如下:
    public partial  class news
    {
        partial void OnValidate(System.Data.Linq.ChangeAction action)
        {
            if (!IsValid)
            {
                throw new ApplicationException("验证内容项出错!");
            }
        }
        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(this.title .Trim () ))
                yield return new RuleViolation("题目步能为空!", "题目");
            if (String.IsNullOrEmpty(this.contents .Trim ()))
                yield return new RuleViolation("内容不能为空!", "内容");         
            yield break;
        }
    }
/// <summary>
    /// 规则信息类
    /// </summary>
    public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }
        public RuleViolation(string errorMessage)
        {
            ErrorMessage = errorMessage;
        }
        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage = errorMessage;
            PropertyName = propertyName;
        }
    }
在这里给出这么多代码,其实是提前有设计的,因为从业务角度考虑,还不应该写这部分代码。RuleViolation类很简单,就是一个包括了两个属性的类(这个类的结构设计是根据后面的ModelState.AddModelError主法来设计的)。
在news分部类中,有一个IsValid的属性,这个属性是bool类型的,返回值取决于GetRuleViolations这个方法,这个方法返回值是一个IEnumerable<RuleViolation>类型的,IEnumerable是通过news的几个属性是否为空来生成跌代的。如果title或contents为Null或””,就返回跌代。其实真正的用户数据的验证就是在这里实现,用户的数据的对与错,就是一个逻辑,只要用户数据不符合规则,就可以 “yield return new RuleViolation("错误标识","错误提示信息!")”;这里的错误码提示信息是显示到客户端的,所以要处理好友好的提示。
现在验证用户数据,生成错误列表的工作都做完了,但关键是怎么能让用户提交数据时,调用OnValidate。这个问题,先放一下,请记住,上面的代码,只要在用户提交数据时,调用OnValidate,这样就能得到错误集合。
现在,让我们来处理Cotroller和View层,在Cotroller层,首先来添加index这个Action,代码如下:
public ActionResult Index()
        {          
            var NewsList = DCDC.news.Select(newss=>newss);
            return View(NewsList );
     }
这个Action返回所有news表中的记录。
对应的View如下:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcCompany.Models.news>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
     Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Index</h2>
    <table>
        <tr>
            <th></th>
            <th>
                ID
            </th>
            <th>
                title
            </th>
            <th>
                datetimes
            </th>
            <th>
                contents
            </th>
            <th>
                IsValid
            </th>
        </tr>
    <% foreach (var item in Model) { %>
   
        <tr>
            <td>
                <%= Html.ActionLink("Edit", "Edit", new { id=item.ID }) %> |
                <%= Html.ActionLink("Details", "Details", new { id=item.ID })%>
            </td>
            <td>
                <%= Html.Encode(item.ID) %>
            </td>
            <td>
                <%= Html.Encode(item.title) %>
            </td>
            <td>
                <%= Html.Encode(String.Format("{0:g}", item.datetimes)) %>
            </td>
            <td>
                <%= Html.Encode(item.contents) %>
            </td>
            <td>
                <%= Html.Encode(item.IsValid) %>
            </td>
        </tr>
   
    <% } %>
    </table>
    <p>
        <%= Html.ActionLink("Create New", "Create") %>
    </p>
</asp:Content>
代码中,需要我们注意是的    <%= Html.ActionLink("Edit", "Edit", new { id=item.ID }) %>
 

ASP.NET MVC数据验证(上)相关推荐

  1. 艾伟_转载:ASP.NET MVC数据验证

    关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解.也可能很多人都在Scott Guthrie等人写的一本<ASP.NET MVC 1.0>书中,见过Ner ...

  2. 【ASP.NET MVC4】第八课:MVC数据验证、验证特性、自定义验证

    知识点:MVC数据验证概述.验证特性的使用.自定义验证.扩充基于 Entity Framework 的数据模型. 1.MVC 数据验证概述 1.1  为什么要进行数据验证 ASP.NET MVC 中的 ...

  3. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  4. ASP.NET MVC 2 验证

    来源:http://www.cnblogs.com/jhxk/articles/2612885.html  只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...

  5. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

  6. ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API

    本篇尝试在现有的ASP.NET MVC 4 项目上增加使用ASP.NET Web API. 新建项目,选择"ASP.NET MVC 4 Web应用程序". 选择"基本&q ...

  7. angular2+typescript在asp.net MVC Web项目上的实现

    网上现在还没有关于angular2+typescript在asp.net mvc web项目上的实现的系统介绍,这里我也只是探索到了一个简单的方式,还有很多问题没能解决.但是能有个好的开头也值得记录一 ...

  8. ASP.NET MVC数据标记验证

    如果我发布的文章里有错误请各路高手给指出. DataAnnotation提供了一个简单的方式,在应用中的Model和View 类中添加验证规则,在ASP.NET MVC中有自动的绑定和UI辅助方法验证 ...

  9. 写自己的ASP.NET MVC框架(上)

     开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的MVC框架设计架构 回忆以往AJAX的实现方式 MyMVC中实现AJAX的方式 如何使用MyMVC框架中的AJAX功能 配置MyM ...

最新文章

  1. UA MATH564 概率论 QE练习题 信封问题
  2. u盘读写测试_如何提高u盘读写速度 提高u盘读写速度方法【详细步骤】
  3. JS手动实现一个new操作符
  4. PageAdmin建站系统模板制作教程1:Razor简介
  5. 闪电邮修改服务器设置,网易闪电邮添加outlook邮箱的方法(图文教程)
  6. SRM 627 D1L2GraphInversionsDFS查找指定长度的所有路径 Binary indexed tree (BIT)
  7. 回归模型的score得分为负_逻辑回归评分卡实现和评估
  8. vue elementui表单的坑
  9. 使用自定义端口连接SQL Server 的方法
  10. 大学计算机基础题库百度云资源,《大学计算机基础试题题库及答案》.pdf
  11. 数据结构-直接选择排序
  12. 数据库编程之ODBC编程
  13. c语言for死循环的作用,for循环死循环语句
  14. win10多台计算机共享文件夹设置密码,win10系统给共享文件夹设置密码的操作方法...
  15. AT指令判断NBIoT网络质量
  16. 用友U8数据备份实例工作经验
  17. Kanzi for Android Demo
  18. Excel快速核对两张表格
  19. IT未来发展五大趋势
  20. Matlab plotyy画2个纵坐标不同的图

热门文章

  1. C算法编程题(二)正螺旋
  2. svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...
  3. 直接插入排序(Straight Insertion Sort)
  4. Password Creator(HTA)
  5. 快速对比UART、SPI、I2C通信的区别与应用
  6. 面经——嵌入式软件工程师ARM体系与架构相关
  7. 全国计算机等级考试题库二级C操作题100套(第95套)
  8. 启动图一键生成工具_一键即运行!清华团队推出图深度学习工具包CogDL v0.1
  9. 数据结构基础:树结构的学习笔记
  10. 程序员最反感的十件事,你有同感吗?