【发布时间】:2012-06-19 14:27:35
【问题描述】:
我在 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 字段确实出现并且所有输入都正常工作并且正在验证。只有在初始加载时,它们才会出现在密码字段中。
【问题讨论】:
-
这可能不是问题,但你还在使用不显眼的验证吗?
-
是的,我在 web.config 中有
-
我希望你也包含了 jquery.unobtrusive-ajax.js 库?
-
是的。我包括 jquery.min、jquery.validate.min 和 validate.unobtrusive.min
-
您是否检查过您的操作方法中 this.ModelState.IsValid 的值?如果是真的,你就知道问题不在于 JavaScript。如果它是假的,你知道它是。
标签: javascript asp.net-mvc asp.net-mvc-3 jquery-validate