好吧,我是一个初学者,正在研究一个已存在 ASP.Net MVC 5 web应用程序。如何正确使用ASP.Net MVC中的远程验证属性5
概述Web应用程序的: 这个Web应用程序更像是工作新闻动态创建不同类型的部件和功能为每个客户端的需求。所以多个网址击中这个网络应用程序,他们都被视为一个单独的网站。所有的小部件都有自己的网址。这些Url的链接到不同的客户端和所有有趣的东西。
期:问题可能与我上面解释的完全无关。如何在ASP.Net MVC 5中正确使用Remote Validation属性。下面是代码片段和问题。我只有一个电子邮件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>
}
所以,FO如果用户输入电子邮件ID,并且返回类型为false,则第一次显示ErrorMessage = "Somethin Wrong"
正确显示。但问题从第二次开始。现在,每次我在电子邮件字段中键入字母来更改它。在每个键盘上单击IsEmailUnique函数开始击中。我的意思是当我看到错误信息后,第一次看到错误消息时,我现在去了UI文本框,并开始给出其他一些电子邮件ID,但是现在对于每一个字母,我把远程验证方法都打了。理想的情况是,当我挖掘出文本框或点击sbumit按钮(它的工作是第一次的方式)
编辑
检查元素代码,UI TEXTBOX应该发生
<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>
进一步 在第二次尝试(成功后看到远程校验错误),当我尝试广告ding电子邮件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堆栈
说实话,我不知道这上面的代码片段做了什么,但为什么这个代码是越来越当我键入任何字母打EmailID文本框或此代码甚至与问题远程相关。我原来的问题是,为什么远程验证发生在每个字母放在文本框中。我尽量在问题中尽可能多地提供细节。请指导我。
因为那是'jquery.validate.js'的默认行为 - 它的'懒惰'(意思是你可以在不触发验证的情况下通过控件选项卡,但是一旦控件首次验证,因为值已经改变,验证会在'.keyup()'上执行) –
@StephenMuecke:谢谢。 :) – Unbreakable