我正在使用MVC 3中的远程验证属性来检查电子邮件地址的唯一性,并且在使用ajax表单时无法启动它。我有一个表单_SignupForm,我在两个场景中使用: 1.在启用javascript时作为jquery对话框,2.在禁用javascript时作为普通页面(也可以通过浏览页面获得)。
当我导航到普通的cshtml页面时,所有的验证都按照预期工作。当我在jquery对话框中使用表单时,除了远程验证之外,所有验证都可以工作。
这是我的模型:
public class SignUpModel : BaseModel
{
[Display(Name = "Your Name")]
[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter your name")]
public string Name { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter your email address")]
[DataType(DataType.EmailAddress, ErrorMessage = "Please enter a valid email address")]
[Remote("EmailAddress", "Validation", ErrorMessage = "Account already exists", HttpMethod = "POST")]
[Display(Name = "Your Email")]
public string EmailAddress { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter a password")]
[DataType(DataType.Password)]
[Display(Name = "Choose a password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Retype password")]
[Compare("Password", ErrorMessage = "Your passwords do not match")]
public string ConfirmPassword { get; set; }
[Display(Name = "Receive a weekly newsletter")]
public bool ReceiveNewsletter { get; set; }
public bool Agree { get; set; }这是我的表格:
@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "signupDialog" }))
{
@Html.ValidationSummary(true)
<ol>
@*name*@
<li>
<div class="label">
@Html.LabelFor(m => m.Name)
</div>
<div class="field">
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</div>
</li>
@*email*@
<li>
<div class="label">
@Html.LabelFor(m => m.EmailAddress)
</div>
<div class="field">
@Html.TextBoxFor(m => m.EmailAddress)
@Html.ValidationMessageFor(m => m.EmailAddress)
</div>
</li>
@*password*@
<li>
<div class="label">
@Html.LabelFor(m => m.Password)
</div>
<div class="field">
@Html.TextBoxFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
</li>
@*confirm password*@
<li>
<div class="label">
@Html.LabelFor(m => m.ConfirmPassword)
</div>
<div class="field">
@Html.TextBoxFor(m => m.ConfirmPassword)
@Html.ValidationMessageFor(m => m.ConfirmPassword)
</div>
</li>
@*newsletter*@
<li>
<div class="field">
@Html.CheckBoxFor(m => m.ReceiveNewsletter)
</div>
<div class="label">
@Html.LabelFor(m => m.ReceiveNewsletter)
</div>
</li>
@*terms*@
<li>
<div class="field">
@Html.CheckBoxFor(m => m.Agree)
</div>
<div class="label">
@Html.LabelFor(m => m.Agree)
</div>
</li>
<li>
<input type="submit" value="Save" />
</li>
</ol>
}当我使用firebug检查字段时,我在这两种情况下都看到了这一点:
<input id="EmailAddress" type="text" value="" name="EmailAddress" data-val-required="Please enter your email address" data-val-remote-url="/garden/Validation/EmailAddress" data-val-remote-type="POST" data-val-remote-additionalfields="*.EmailAddress,*.UserId" data-val-remote="Account already exists" data-val="true">提前感谢您的帮助。
在编辑之后,在我的jquery对话框中,客户端验证似乎完全不起作用。这有可能吗?
发布于 2011-07-12 22:43:07
我在MVC3中的远程验证也遇到了同样的问题。在我的例子中,我使用一个JQuery.dialog()方法动态地在JQuery.load()中加载一个表单。
只要在加载表单后调用以下命令,就可以使客户端验证工作,只要设置了用于非阻塞和客户端验证的标志以及相应的js文件:
$.validator.unobtrusive.parse($("form"));然后,在进行$.ajax调用以发布结果之前,我检查表单是否有效:
if ($(form).valid()) {这会导致客户端触发,并给我客户端验证。然而,当这种情况发生时,它也会触发MVC远程验证代码,但是使用的是空值,这会导致远程验证方法失败,因为没有什么可比较的。
https://stackoverflow.com/questions/6060973
复制相似问题