我在 MVC3 中的帐户创建表单上遇到客户端验证问题。我在模型上使用数据注释,视图是局部视图。当我在局部视图中运行它时,只有两个字段正在验证。当我将代码放在常规视图中时,所有字段都正在验证中。
搜索后这似乎是一个常见问题,但这种情况似乎不同,因为它是“半工作”,这意味着我确信 .js 库已加载并且至少可以正常工作。我没有用 Ajax 加载任何似乎会导致问题的东西。我正在使用 jquery 1.5.1 和 jquery.validate 1.8.0,它们是安装 MVC3 时附带的 IIRC。
有没有人看到/解决过这类问题?
这是我的看法:
<%: Html.Hidden("Bounce", Model.Bounce)%>
<div class="editor-label"><label for="FirstName">First Name</label></div>
<div class="editor-field">
<%: Html.TextBox("FirstName", Model.FirstName)%><br />
<%=Html.ValidationMessage("FirstName")%>
</div>
<div class="editor-label"><label for="MiddleName">Middle Name</label></div>
<div class="editor-field">
<%: Html.TextBox("MiddleName", Model.MiddleName)%><br />
<%=Html.ValidationMessage("MiddleName")%>
</div>
<div class="editor-label"><label for="LastName">Last Name</label></div>
<div class="editor-field">
<%: Html.TextBox("LastName", Model.LastName)%><br />
<%=Html.ValidationMessage("LastName")%>
</div>
<div class="editor-label"><label for="Email">Email</label></div>
<div class="editor-field">
<%: Html.TextBox("Email", Model.Email)%><br />
<%=Html.ValidationMessage("Email")%>
</div>
<div class="editor-label"><label for="Password1">Password</label></div>
<div class="editor-field">
<%: Html.Password("Password1",Model.Password1)%><br />
<%=Html.ValidationMessage("Password1")%>
</div>
<div class="editor-label"><label for="Password2">Confirm Password</label></div>
<div class="editor-field">
<%: Html.Password("Password2",Model.Password2)%><br />
<%=Html.ValidationMessage("Password2")%>
</div>
<div class="form-controls"><input type="submit" value="Create Account" /></div>
视图正在渲染
<% Html.RenderPartial("create", new CustomerCreationRequest()); %>
这是模型
public class CustomerCreationRequest
{
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
public string MiddleName { get; set; }
[Required(ErrorMessage = "Last Name is required")]
public string LastName { get; set; }
[Required(ErrorMessage = "Email Address is required")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
public string Password1 { get; set; }
[Compare("Password1", ErrorMessage = "The password and confirmation do not match.")]
[Required(ErrorMessage = "Password confirmation is required")]
public string Password2 { get; set; }
public string Bounce { get; set; } //bounce
}
正常工作的两个字段是 Password1 和 Password2 字段。两种验证规则都可以正常工作(即要求和比较)。所有其他字段都未经过验证,并且允许在空白时提交表单。
更新
查看生成的标记时,前 4 个正常输入字段中不存在 data-val-required 字段,但出现在最后 2 个密码字段(有效的字段)中。
更新 2
在表单提交并被服务器拒绝后,data-val-required 字段确实会出现,并且所有输入都正常工作并且正在验证。只有在初始加载时,它们才会出现在密码字段中。