ASP.NET MVC实践系列3-服务器端数据验证

简介:

我们这里主要讲解ASP.NET MVC中服务器端得数据验证,至于客户端验证我们会在以后的系列中讲到。

在Controller中有一个ModelState属性,这是一个类型为ModelStateDictionary的ModelState类型的字典集合。在进行数据验证的时候这个属性是比较有用的。在使用Html.ValidationMessage()的时候,就是从ModelState中检测是否有指定的KEY,如果存在,就提示错误信息。

1、基本实例

在View中添加如下文件

复制代码
Code
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again."%>

    
<% using (Html.BeginForm()) {%>

        
<fieldset>
            
<legend>Fields</legend>
            
<p>
                
<label for="id">id:</label>
                
<%= Html.TextBox("id", Model.id) %>
                
<%= Html.ValidationMessage("id""*"%>
            
</p>
            
<p>
                
<label for="Title">Title:</label>
                
<%= Html.TextBox("Title", Model.Title) %>
                
<%= Html.ValidationMessage("Title""*"%>
            
</p>
             
<p>
                
<input type="submit" value="Save" />
            
</p>
        
</fieldset>

    
<% } %>
复制代码

在相应的Controller中添加如下代码

复制代码
Code
public ActionResult NewsEdit(int id)
        {
            NewsDataDataContext dc 
= new NewsDataDataContext();
            
return View(dc.News.First(n => n.id == id));
        }
        [AcceptVerbs(HttpVerbs.Post)]
        
public ActionResult NewsEdit(int id, FormCollection formValues)
        {
            News news 
= new News();
            UpdateModel(news);
            
if (String.IsNullOrEmpty(news.Title))
            {
                ModelState.AddModelError(
"Title""Title不能为空");
            }
            
else
            {
                
//进行更新
            }
            
return View(news);
        }
复制代码

View中使用Html.ValidationMessage(string modelName)来对指定的属性进行验证:这里仍然使用的是mvc中默认的约定,modelName的内容如果和ModelState中的key值一样是就显示。

其中ValidationSummary()是用于显示全部的验证信息的。跟ASP.NET里面的ValidationSummary验证控件差不多。

运行程序得到的结果为:

Html.ValidationMessage()方法会为出错的属性的输入框添加一个名为"input-validation-error"的CSS类,同时后面的提示信息的CSS类名为"field-validation-error":

Code
 <input class="input-validation-error" id="Title" name="Title" type="text" value="" />
                
<span class="field-validation-error">*</span>

CSS类的样式是可以由我们自己自由定义的

2、应用

这里我们为之前的News实例添加服务器端验证,首先我们需要一个传递错误信息的类

复制代码
Code
 public class RuleViolation
    {
        
public string ErrorMessage { getprivate set; }
        
public string PropertyName { getprivate set; }
        
public RuleViolation(string errorMessage)
        {
            ErrorMessage 
= errorMessage;
        }
        
public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage 
= errorMessage;
            PropertyName 
= propertyName;
        }
    }
复制代码

然后为dbml中的News类添加一个partial类,来用于验证属性

复制代码
Code
public partial class News
    {
        
public bool IsValid
        {
            
get { return (GetRuleViolations().Count() == 0); }
        }

        
partial void OnValidate(ChangeAction action)
        {
            
if (!IsValid)
                
throw new ApplicationException("Rule violations prevent saving");
        }
        
public IEnumerable<RuleViolation> GetRuleViolations()
        {
            
if (String.IsNullOrEmpty(Title))
                
yield return new RuleViolation("必须要输入标题""Title");
            
if (String.IsNullOrEmpty(Author))
                
yield return new RuleViolation("必须要输入作者""Author");

            
yield break;
        }
    }
复制代码

Controller中填入如下代码

复制代码
Code
[AcceptVerbs(HttpVerbs.Post)]
        
public ActionResult NewsEdit(int id, FormCollection formValues)
        {
            NewsDataDataContext dc 
= new NewsDataDataContext();
            News news 
= dc.News.First(n => n.id == id);
            
try
            {
                UpdateModel(news);
                dc.SubmitChanges();
                
return RedirectToAction("Details"new { id = id });
            }
            
catch (Exception)
            {
                
foreach (var issue in news.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }
                
return View(news);
            }
        }
复制代码

注:当对DataDataContext执行SubmitChanges方法时会触发OnValidate分布方法。

3、源码

4、参考:

http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html

《Professional ASP.NET MVC 1.0》

本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2009/10/27/1590532.html   ,如需转载请自行联系原作者

相关文章
|
6月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
1428 1
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
243 8
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
225 5
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
590 0
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
389 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
701 2
|
SQL 开发框架 .NET
ASP连接SQL数据库:从基础到实践
随着互联网技术的快速发展,数据库与应用程序之间的连接成为了软件开发中的一项关键技术。ASP(ActiveServerPages)是一种在服务器端执行的脚本环境,它能够生成动态的网页内容。而SQL数据库则是一种关系型数据库管理系统,广泛应用于各类网站和应用程序的数据存储和管理。本文将详细介绍如何使用A
433 3
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
330 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
335 0

热门文章

最新文章