我正在构建一个应用程序,该应用程序最初将推广到特定的大学校园。
我想确保,当用户注册并提供他们的电子邮件地址时,他们学校会提供电子邮件,以确保只有合法学生才能访问该服务。
有没有人对如何做到这一点有任何例子或想法?也许有自定义验证属性?
注意: 更具体地说,我只需要确保他们输入的电子邮件是.edu电子邮件地址
看起来像是正则表达式......任何人都可以提供正确表达的指导吗?
答案 0 :(得分:3)
我会创建一个正则表达式属性和自定义DataAnnotation。在Global中的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));
}
最后是Model,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; }
}
}
答案 1 :(得分:2)
如果您正在寻找自定义验证器,请参阅this article,它对MVC模型验证有非常好的解释。
您应该使用正则表达式attibute 作为模型中电子邮件字段的验证程序。这也在文章中解释。
答案 2 :(得分:2)
使用RegularExpressionAttribute并为您的特定域构建相应的正则表达式。
答案 3 :(得分:1)
自定义验证属性你说了吗?以下是指南:http://msdn.microsoft.com/en-us/gg618485
答案 4 :(得分:1)
如果用户属于特定的大学,则需要具有特定的电子邮件后缀。 您可以将其存储在表中,然后在用户登录系统时检查后缀 根据学院的说法。
如果您需要检查有效的电子邮件地址,可以使用正则表达式。
请参阅示例代码C#以检查有效的电子邮件。
Regex re = new Regex(@"\w.\w@{1,1}\w[.\w]?.\w");
return re.IsMatch(email);
答案 5 :(得分:1)
有RemoteAttribute
验证属性(RemoteAttribute Class)。
在其参数中,您可以指定可以执行验证过程的控制器操作。
答案 6 :(得分:1)
理想情况下,我们可以让学校下学,学生需要选择学校并输入电子邮件地址。
然后我们可以找到学校名称和电子邮件格式的映射。
school name - ABC
email format - [\w]+[\.\-\_]?[\w]+@ABC.[edu|org]
电子邮件格式可能因提供商而异。
这些东西可以是web.config
的一部分<Web.config>
<appsettings>
<add key="ABC" value="[\w]+[\.\-\_]?[\w]+@ABC.[edu|org]"/>
.
.
.
我们可以使用ConfigurationManager从配置中读取值。
此外,您的模型可以继承IValidatableObject并覆盖Validate方法以验证电子邮件地址,如果无效,则返回ValidationRessult,可以在视图上显示为验证错误