0

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フィールド表示され、すべての入力が正しく機能し、検証されます。パスワードフィールドにのみ表示されるのは、初期ロード時のみです。

4

2 に答える 2

1

これは主にライブラリの不一致(おそらくjquery検証ライブラリ)が原因であると思います。新しいMVC3プロジェクトを作成したとき、バージョン番号が表示されません。jquery検証ライブラリ内。

nugetを使用してライブラリを最新のものに更新してください。

PM>インストール-パッケージjQuery

PM>インストール-パッケージjQuery.Validation

PM>インストール-パッケージjQuery.Validation.Unobtrusive

于 2012-06-19T15:19:27.060 に答える
0

私はコードをMVCに更新し、強く型付けされたビューを使用する過程にあり、以前のバージョンから、これらの名前付きフィールドをViewDataに書き出すコードのブロックがコントローラーにありました。例えば

        ViewData["loginError"] = "";
        ViewData["createError"] = "";
        ViewData["firstName"] = "";
        ViewData["middleName"] = "";
        ViewData["lastName"] = "";
        ViewData["email"] = ""; 

これらを削除すると、すべてが機能しました。

于 2012-06-19T18:27:36.900 に答える