我在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字段 ,并且所有输入都正常工作并且正在验证。只有在初始加载时,它们才会出现在密码字段中。
答案 0 :(得分:1)
我希望这主要是由于库不匹配(可能是jquery验证库)。当我创建一个新的MVC 3项目时,我没有看到版本号。在jquery验证库中。
请使用nuget将库更新为最新版。
PM&GT; Install-Package jQuery
PM&GT; Install-Package jQuery.Validation
PM&GT; Install-Package jQuery.Validation.Unobtrusive
答案 1 :(得分:0)
我正在将代码更新为MVC并使用强类型视图,而在以前的版本中,控制器中有一段代码将这些命名字段写入ViewData。 e.g。
ViewData["loginError"] = "";
ViewData["createError"] = "";
ViewData["firstName"] = "";
ViewData["middleName"] = "";
ViewData["lastName"] = "";
ViewData["email"] = "";
当我删除这些工作时。