我正在使用C#,MVC4构建一个帐户类,其中包含一个名为GmailAccount的属性,该属性将由用户输入。
在Model中,我使用以下RegularExpression属性:
[RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@gmail.com"]
这会验证电子邮件是否以@gmail.com
结尾。
在我的html视图中,我只是使用:
editorFor(model => model.GmailAccount) @@gmail.com
请注意,我在html中键入了@@ gmail,以防止用户输入域名,并确保/强制该用户使用有效的Gmail帐户。
但是,我们还注意到在客户端和服务器端验证了相同的RegularExpression属性。我真的不希望我的用户手动输入域名,因为我不允许它与“@ gmail.com”不同。
问题:
有没有办法将@gmail.com附加到editorFor中提供的任何用户名作为客户端和服务器端验证之前的用户名?还是其他一些好的选择?
答案 0 :(得分:1)
我要做的是围绕您要做的事情创建一个视图模型:
public EmailEntryViewModel
{
private string _emailPrefix = string.Empty;
public string FullEmailAddress
{
get
{
return _emailPrefix + "@gmail.com";
}
set
{
if (!value.EndsWith("@gmail.com", StringComparison.OrdinalIgnoreCase))
{
//whatever logic that is internal
throw new InvalidOperationException("Database contains an invalid email.");
}
this._emailPrefix = value.Substring(0,
email.IndexOf("@gmail.com", StringComparison.OrdinalIgnoreCase));
}
}
[RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*"]
public string EmailPrefix
{
get
{
return _emailPrefix;
}
set
{
_emailPrefix = value;
}
}
}
然后你只需要:
@Html.EditorFor(model => model.EmailPrefix) @@gmail.com