1

次の部分的なビューがあります (このフォーラムでは単純にするために、一部の書式を削除しました)。私のフォームタグは親ページにあり、ダイアログの項目はそのフォームの一部です。これは、厳密に型指定された部分ビューです。モデルで password フィールドと confirmPassword フィールドを [必須] として定義しました。

@Html.LabelFor(m => m.password)
<a href="#" onclick="openResetPasswordDialog();">Reset Password</a>

<div id="dialogResetPassword" title="Reset Password">
    <p>Reset password for user: @Model.userId</p>
        @Html.LabelFor(m => m.password)
        @Html.PasswordFor(m => m.password)
        @Html.ValidationMessageFor(m => m.password)
    <div class="rowEnd"></div>

    @Html.LabelFor(m => m.confirmPassword)
    @Html.PasswordFor(m => m.confirmPassword)
    @Html.ValidationMessageFor(m => m.confirmPassword)
    <div class="rowEnd"></div>
</div>

ダイアログの初期化用に次の JavaScript があります。

function initializeResetPasswordDialog() {
    $(resetPasswordDialogId).dialog(
    {
        autoOpen: false,
        autoResize: true,
        buttons: {
            Ok: function () {
                if (!($('#userForm').valid())) {
                    return false;
                }
                //more code goes here ...
                closeResetPasswordDialog();
            },
            Cancel: function () {
                closeResetPasswordDialog();
            }
        }
    });
}

私のダイアログは初期化され、正常に開いたり閉じたりしますが、ダイアログ内の項目の有効性を確認しようとすると、常に「有効」になります。

フォーム全体を送信するのではなく、[OK] ボタンのパスワードとパスワードの確認フィールドを送信するだけで、検証も起動します。これを行う方法に関する提案はありますか?

4

1 に答える 1

0

わかりましたので、jQuery ダイアログの open パラメータに次の関数を追加して解決しました。

        open: function () {
            $(this).parent().appendTo("#userForm");
        }

jQuery ダイアログを初期化するときに、それがフォーム内にあったとしても、ブラウザで HTML ページをレンダリングすると、ダイアログ div がフォームの外に移動することに気付きました。検証が機能するには、入力がフォーム内にある必要があります。

この投稿が他の人にも役立つことを願っています!

于 2013-06-13T15:17:58.163 に答える