我尝试使用遥控功能,但它不起作用。
这是我的代码:
模型
[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>
}
答案 0 :(得分:0)
检查您的配置
我会确保您在web.config
文件中具有正确的配置设置,以确保执行远程/客户端验证:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
您还需要确保您也引用了正确的客户端验证库(分别为jquery.{version}.js
和jquery.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
。)