MVC3局部视图中的客户端验证半工作

时间:2012-06-19 14:27:36

标签: javascript asp.net-mvc asp.net-mvc-3 jquery-validate

我在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字段 ,并且所有输入都正常工作并且正在验证。只有在初始加载时,它们才会出现在密码字段中。

2 个答案:

答案 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"] = ""; 

当我删除这些工作时。