好的,我是初学者,正在开发一个已有的 ASP.Net MVC 5网络应用程序。
WebApp概述 这个Web应用程序更像是工作新闻,并根据客户需求动态创建不同类型的小部件和功能。因此,多个网址会点击此网络应用,并且它们都被视为一个单独的网站。所有小部件都有自己的网址。这些网址链接到不同的客户端和所有有趣的东西。(幽默我这个)。
问题:问题可能与我上面解释的内容完全无关。如何在ASP.Net MVC中正确使用远程验证属性5.下面是代码片段和问题。我只有一个电子邮件ID字段,我想对它应用远程验证。
模型
public class ForgotPasswordMV
{
[Display(Name = "Email"), Required]
[Remote("IsEmailUnique", "Settings", ErrorMessage = "Somethin Wrong")]
public string EmailId { get; set; }
}
控制器功能
Public JsonResult IsEmailUnique(string EmailId)
{
var respObj = SecurityHelper.EmailCount(EmailId); // if count > 1 returns false
return Json(respObj, JsonRequestBehavior.AllowGet);
}
查看文件
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<h2>Forgot Password</h2>
@using (@Html.BeginForm("ForgotPassword", "Security"))
{
@Html.ValidationSummary(true, "Please fix below error")
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(m => m.EmailId)
@Html.TextBoxFor(m => m.EmailId, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.EmailId)
</div>
<button class="btn btn-primary">Continue</button>
}
因此,对于用户输入电子邮件ID的第一时间,如果返回类型为false,则ErrorMessage = "Somethin Wrong"
会正确显示。但问题从第二次开始。现在,每次我在电子邮件字段中键入字母进行更改。在每个键盘上单击IsEmailUnique函数开始命中。我的意思是当我看到错误消息后第一次看到ERROR MESSAGE时,我现在转到UI文本框并开始提供其他一些电子邮件ID,但现在对于我放置的每个字母,远程验证方法都被点击了。理想情况下,当我点击文本框或点击sbumit按钮(它第一次工作的方式)时,应该会发生这种情况。
修改
检查UI文本框的元素代码
<div class="form-group">
<label for="EmailId">Email</label>
<input class="form-control input-validation-error" data-val="true" data-val-remote="Something went wrong" data-val-remote-additionalfields="*.EmailId" data-val-remote-url="/Settings/IsEmailUnique" data-val-required="The Email field is required." id="EmailId" name="EmailId" type="text" value="" aria-required="true" aria-invalid="true" aria-describedby="EmailId-error">
<span class="field-validation-error" data-valmsg-for="EmailId" data-valmsg-replace="true"><span id="EmailId-error" class="">Something went wrong</span></span>
</div>
更多
在第二次尝试期间(成功查看远程验证错误后),当我尝试在电子邮件ID字段中添加任何字母时,我注意到下面的代码块被点击,然后验证方法IsEmailUnique
正在获取击中。
public class SimRoute : Route
{
/// <summary>
/// Base c-tor, implementing the base class ctor
/// </summary>
public SimRoute(string url, IRouteHandler routeHandler) : base(url, routeHandler) { }
/// <summary>
/// This is where the "magic" happens - this is where the subdomain is retrieved & inserted into route values, so it can be referenced at a later time
///
/// The rest of the functionality is being retained by running the call to the base class
/// </summary>
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData routeData = base.GetRouteData(httpContext);
if (routeData != null)
{
string[] temp = httpContext.Request.Url.Host.Split('.');
if (temp.Length > 0)
{
routeData.Values.Add("subdomain", temp.First());
}
}
return routeData;
}
}
CALL STACK
说实话,我不确定上面的代码片段是做什么的,但是为什么在我在EmailID文本框中输入任何字母时这个代码就会被点击,或者这个代码甚至与问题远程相关。我最初的问题是,为什么在文本框中放入的每个字母都会进行远程验证。我试图在问题中尽可能多地提供详细信息。请指导我。
答案 0 :(得分:1)
我建议你尝试从字段/表单中删除onkeypress事件,如下面的q&amp; a中所述