技术开发 频道

MVC框架开发Web论坛之另类表单校验篇

  列表4–Validation.cs

using System.Web.Mvc;

namespace MvcValidation
{
    
public class Validation
    {
        
public static void UpdateModelStateWithViolations(RuleViolationException ruleViolationException, ModelStateDictionary modelState)
        {
            
foreach (var issue in ruleViolationException.ValidationIssues)
            {
                var value
= issue.PropertyValue ?? string.Empty;
                modelState.AddModelError(issue.PropertyName, value.ToString(), issue.ErrorMessage);
            }
        }


    }
}

 

  让我们来看一下上面所有这些类是如何协同工作的。首先注意到,列表5中的Message类描述了一个论坛消息。注意,这个类通过实现Validate()和GetRuleViolations()方法实现了IRuleEntity接口。
列表5–Message.cs
 

using System;
using MvcValidation;
using System.Collections.Generic;
using System.Data.Linq;
using MvcValidation.Attributes;
using System.Web.Mvc;

namespace MvcForums.Models.Entities
{
    
public class Message :IRuleEntity
    {
        
private DateTime _entryDate = DateTime.Now;

        
public Message()
        { }

        
public Message(int id, int? parentThreadId, int? parentMessageId, string author, string subject, string body)
        {
            
this.Id = id;
            
this.ParentThreadId = parentThreadId;
            
this.ParentMessageId = parentMessageId;
            
this.Author = author;
            
this.Subject = subject;
            
this.Body = body;
        }

        
public int Id { get; set; }
        
public int? ParentThreadId { get; set; }
        
public int? ParentMessageId { get; set; }
        
public string Author { get; set; }
        
public string Subject { get; set; }
        
public string Body { get; set; }

        
        
public DateTime EntryDate
        {
            
get { return _entryDate; }
            
set { _entryDate = value; }  
        }

        
#region IRuleEntity Members

        
public List<RuleViolation> GetRuleViolations()
        {
            var validationIssues
= new List<RuleViolation>();

            
// Validate Subject
            if (String.IsNullOrEmpty(this.Subject))
                validationIssues.Add(
new RuleViolation("subject", this.Subject, "You must enter a message subject."));

            
// Validate Body
            if (String.IsNullOrEmpty(this.Body))
                validationIssues.Add(
new RuleViolation("body", this.Body, "You must enter a message body."));

            
return validationIssues;
        }

        
public void Validate()
        {
            var validationIssues
= GetRuleViolations();
            
if (validationIssues.Count > 0)
                
throw new RuleViolationException("Validation Issues", validationIssues);
        }

        
#endregion

    }
}
0
相关文章