将域名附加到editorFor的电子邮件中

时间:2014-07-22 18:19:06

标签: c# javascript validation asp.net-mvc-4 editorfor

我正在使用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中提供的任何用户名作为客户端和服务器端验证之前的用户名?还是其他一些好的选择?

1 个答案:

答案 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