如何在ASP.Net MVC 5

时间:2017-08-03 15:16:33

标签: c# asp.net asp.net-mvc validation asp.net-mvc-5

好的,我是初学者,正在开发一个已有的 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

enter image description here

说实话,我不确定上面的代码片段是做什么的,但是为什么在我在EmailID文本框中输入任何字母时这个代码就会被点击,或者这个代码甚至与问题远程相关。我最初的问题是,为什么在文本框中放入的每个字母都会进行远程验证。我试图在问题中尽可能多地提供详细信息。请指导我。

1 个答案:

答案 0 :(得分:1)

我建议你尝试从字段/表单中删除onkeypress事件,如下面的q&amp; a中所述

ASP.NET Remote Validation only on blur?