MVC3のアカウント作成フォームでのクライアント側の検証に問題があります。モデルでデータ注釈を使用していますが、ビューは部分ビューです。部分ビューで実行すると、検証されているフィールドは2つだけです。コードを通常のビューに配置すると、すべてのフィールドが検証されます。
検索後、これは一般的な問題のようですが、「半分機能している」ため、このケースは異なっているように見えます。つまり、.jsライブラリが読み込まれ、少なくともある程度機能していると確信しています。問題を引き起こしていると思われるAjaxをロードしていません。私は、MVC3のインストールに付属していたIIRCであるjquery1.5.1とjquery.validate1.8.0を使用しています。
誰かがこの種の問題を見たり解決したりしましたか?
これが私の見解です:
<%: 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
}
正しく機能する2つのフィールドは、Password1フィールドとPassword2フィールドです。両方の検証ルールも同様に機能します(つまり、RequireとCompare)。他のすべてのフィールドは検証されておらず、空白の場合にフォームを送信できます。
アップデート
生成されたマークアップを見ると、data-val-requiredフィールドは最初の4つの通常の入力フィールドには存在しませんが、最後の2つのパスワードフィールド(機能するフィールド)には表示されます。
アップデート2
フォームが送信され、サーバーによって拒否された後、data-val-requiredフィールドが表示され、すべての入力が正しく機能し、検証されます。パスワードフィールドにのみ表示されるのは、初期ロード時のみです。