电子邮件验证在 MVC 中不起作用
Posted
技术标签:
【中文标题】电子邮件验证在 MVC 中不起作用【英文标题】:Email validation not working in MVC 【发布时间】:2013-11-11 12:10:21 【问题描述】:在我的 MVC 应用程序中,电子邮件验证在本地运行良好,但是当我发布和部署到服务器时它就无法运行。我比较了本地和部署文件的html源,没有区别。我的 Razor 视图标记是
<li>
<p><strong>Email: </strong>@Model.CurrentEmailAddress <span class="deliverychange" onclick="showHidden('emailchange');">(Change email)</span></p>
<div id="emailchange" class="fullborder" style="display: none;">
<div class="orderrow newemailaddress">
@Html.LabelFor(m => m.UpdatedEmailAddress)
@Html.TextBoxFor(m => m.UpdatedEmailAddress, new @onkeypress = "showEmailChangeConfirmation();" )
@Html.ValidationMessageFor(m => m.UpdatedEmailAddress)
</div>
<div id="updatedemailkeypress" style="display: none;">
<div class="orderrow checkboxrow emailchangeconfirm">
@Html.LabelFor(m => m.UpdateEmailAddress)
@Html.EnumRadioButtonFor(m => m.UpdateEmailAddress, false)
</div>
</div>
<div class="clear"> </div>
</div>
</li>
我的模型是
[DataType(DataType.EmailAddress)]
[RegularExpression(@"^([\w.-]+)@([\w-]+)((.(\w)2,3)+)$", ErrorMessage = "Email is not valid")]
[Display(Name = "Enter new email address: ")]
public string UpdatedEmailAddress get; set;
[Display(Name = "We will use ****")]
public YesNo UpdateEmailAddress get; set;
【问题讨论】:
检查您的机器和服务器上的 ASP.NET MVC 和所有相关程序集的版本是否相同。数据注释属性在不同版本之间的行为可能不同。 有什么特别的程序集吗? - 因为我在删除现有文件后在服务器上发布了完整的应用程序 System.Web、System.Web.Mvc、System.Web.Razor、System.Web.Webpages。可能还有更多。 【参考方案1】:改用电子邮件地址属性
http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.emailaddressattribute%28v=vs.110%29.aspx
【讨论】:
【参考方案2】:请重新检查表单标签是否存在。
表单验证实际上是通过验证表单有效方法来工作的。 因此,表单必须存在。
希望这会有所帮助。
【讨论】:
【参考方案3】:在花了很多时间之后,我发现发布向导没有将 jquery.validate-vsdoc.js 复制到脚本文件夹。我手动将其复制到服务器并开始工作。
【讨论】:
【参考方案4】:尝试使用dataannotationsextensions库,可以从nuget下载。
然后像这样将 Email 属性添加到您的模型中
using DataAnnotationsExtensions;
[Required]
[DataType(DataType.EmailAddress)]
[Email]
public string UpdatedEmailAddress get; set;
【讨论】:
以上是关于电子邮件验证在 MVC 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章