独特的电子邮件模型asp .net代码优先

时间:2016-04-13 16:32:42

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我尝试使用遥控功能,但它不起作用。

这是我的代码:

模型

[Required(ErrorMessage = "L'email est obligatoire.")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "email n'est pas valide.")]
[DataType(DataType.EmailAddress)]
[Remote("IsEmailAdminExist", "Admin", ErrorMessage = "Email exist!")]
public virtual  string Email { get; set; }

控制器

[HttpGet]
public JsonResult IsEmailAdminExist(string Email)
{
    return Json(!AdminContext.admins.Any(a => a.Email == Email), JsonRequestBehavior.AllowGet);

}

我没有任何回报。

这是我在查看中使用Html.BeginForm

的表单
  @using (Html.BeginForm("Create", "AdminController", FormMethod.Post, new { @id = "form2", @role = "form", @enctype = "multipart/form-data" }))
                        {
                            @Html.AntiForgeryToken()
                            @Html.ValidationSummary(true)

                                <div class="col-md-4">

                                    <div class="form-group @(ViewData.ModelState["Email"] != null &&  Html.ViewData.ModelState["Email"].Errors.Any() ? "has-error" : "")">
                                        <label class="control-label">
                                            Email <span class="symbol required"></span>
                                        </label>
                                        @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                                        @Html.ValidationMessageFor(model => model.Email, "", new { @class = "help-block" })
                                    </div>
                                </div>
                               <div class="row">
                                   <div class="col-md-8">
                                       </div>
                                    <div class="col-md-4">
                                         <button class="btn btn-yellow btn-block" type="submit" name="Create">
                                        Register <i class="fa fa-arrow-circle-right"></i>
                                       </button>
                                     </div>
                               </div>
                       }

1 个答案:

答案 0 :(得分:0)

检查您的配置

我会确保您在web.config文件中具有正确的配置设置,以确保执行远程/客户端验证:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

您还需要确保您也引用了正确的客户端验证库(分别为jquery.{version}.jsjquery.validate.{version}.js)。

查看来电

您可能需要考虑在浏览器中使用开发人员工具(F12)来监控网络流量并确保实际发出请求(您可以通过在IsEmailAddressExists()呼叫中放置断点来实现此目的好。

您应该看到类似于以下内容的请求:

~/Admin/IsEmailAdminExist?Email={your-email-value}

如果没有出现这种情况,请检查“控制台”选项卡中的任何错误,这可能会说明未提出请求的原因。

确保套管不是问题

您可能需要考虑在检查其他值时忽略大小写,因为不同的情况可能导致Any()方法失败,因为它找不到正确的值。尝试使用ToLower()Trim()使您的比较不区分大小写,并忽略任何额外的空格:

[HttpGet]
public JsonResult IsEmailAdminExist(string Email)
{
    // Clean up your e-mail
    var email = Email.ToLower.Trim();
    return Json(!AdminContext.admins.Any(a => a.Email.ToLower() == email), JsonRequestBehavior.AllowGet);
}

检查您的电子邮件验证逻辑

如果已存在具有此电子邮件地址的用户,是否要返回?如果是这样,那么如果确实存在,您将希望实际返回true,因此在通话之前您不需要否定!

// If any exists, this will return true
Json(AdminContext.admins.Any(a => a.Email.ToLower() == email), JsonRequestBehavior.AllowGet);

否则,您当前的代码是正确的(即如果用户已经存在该名称,它将返回false。)