我在MVC 3中使用远程验证属性来检查电子邮件地址的唯一性,并且在使用ajax表单时我无法启动它。我在两种情况下使用了一个表单_SignupForm:1.作为启用javascript的jQuery对话框,以及2.禁用javascript(也可通过浏览到页面时可用)的常规页面。ASP.NET MVC 3从Ajax表单远程验证
当我导航到正常的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的对话框工作在所有。这甚至有可能吗?
你是如何修复它的? – bjan 2012-06-18 09:56:55