Я бы создал атрибут регулярного выражения и пользовательскую аннотацию данных. Зарегистрируйте аннотацию под Application_Start в своей глобальной сети. Затем вы можете использовать проверку в качестве DataAnnotation в вашей модели как на стороне клиента, так и на стороне сервера. У меня есть класс RegularExpressAttributes.cs, который содержит все мои часто используемые регулярные выражения; все, что я делаю, это бросаю это в мои проекты. Если люди хотят, просто дайте мне знать.
Вид:
<div class="editor-field span-7">
@Html.LabelFor(model => model.EmailAddress)
@Html.EditorFor(model => model.EmailAddress)
@Html.ValidationMessageFor(model => model.EmailAddress)
</div>
атрибут регулярного выражения
using System;
using System.Collections.Generic;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace ProjectsMVC.Helpers
{
#region RegularExpressionAttributes
/// <summary>
/// Email validation regular expression attribute
/// </summary>
/// <remarks>Validates person@someplace.com, some.person@someplace.com, some_person@some+place.com and combinations thereof.</remarks>
public class ValidateEmailAttribute : RegularExpressionAttribute
{
// public ValidateEmailAttribute()
// : base(@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$") { }
public ValidateEmailAttribute()
: base(@)@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@someplace.com$") {}
}
#region DataAnnotationsModelValidator
public class EmailValidator : DataAnnotationsModelValidator<ValidateEmailAttribute>
{
#region Properties
/// <summary>
/// Error message
/// </summary>
private readonly string _errorMessage;
/// <summary>
/// Regular expression pattern
/// </summary>
private readonly string _pattern;
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="EmailValidator"/> class.
/// </summary>
/// <param name="metaData">The meta data.</param>
/// <param name="context">The context.</param>
/// <param name="attribute">The attribute.</param>
public EmailValidator(ModelMetadata metaData, ControllerContext context, ValidateEmailAttribute attribute)
: base(metaData, context, attribute)
{
this._errorMessage = attribute.ErrorMessage;
this._pattern = attribute.Pattern;
}
#endregion
#region Methods
/// <summary>
/// Retrieves a collection of client validation rules.
/// </summary>
/// <returns>A collection of client validation rules.</returns>
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
var rule = new ModelClientValidationRegexRule(this._errorMessage, this._pattern);
return new[] { rule };
}
#endregion
}
}
Global.ascx.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
// Register custom model validators
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidateEmailAttribute), typeof(EmailValidator));
}
Наконец модель, User.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using ProjectsMVC.Helpers;
namespace ProjectsMVC.Models
{
[MetadataType(typeof(User_Validation))]
public partial class User
{
public string ProperName
{
get
{
return string.Format("{0} {1}", this.FirstName, this.LastName);
}
}
public string DirectoryName
{
get
{
return string.Format("{0}, {1}", this.LastName, this.FirstName);
}
}
public string IsUserActive
{
get
{
return Dictionaries.TrueOrFalse.First(t => t.Key == this.IsActive).Value.ToString();
}
}
}
public class User_Validation
{
[Display(Name = "eName")]
[Required(ErrorMessage = "required")]
[ValidateEname(ErrorMessage = "invalid")]
public string UserName { get; set; }
[Display(Name = "First DirectoryName")]
[Required(ErrorMessage = "required")]
public string FirstName { get; set; }
[Display(Name = "Last DirectoryName")]
[Required(ErrorMessage = "required")]
public string LastName { get; set; }
[Display(Name = "Email Address")]
[Required(ErrorMessage = "required")]
[ValidateEmail(ErrorMessage = "invalid")]
public string EmailAddress { get; set; }
[Display(Name = "Active User")]
[Required(ErrorMessage = "required")]
public bool IsActive { get; set; }
}
}