0

https://stackoverflow.com/a/5742494/1946707で Darin Dimitrov によって提供されたとおりに NotEqual 属性を実装しました 。

私がここで得ている問題は、jQuery ダイアログを使用していて、ダイアログのクライアント側で検証を取得したいということです。必要な検証が実行されますが、クライアント側で等しくないための検証が機能しません...助けていただければ幸いです。

これが私のモデルです:

public class ChangePasswordModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }

    [Required]
    [NotEqual("OldPassword", ErrorMessage = "should be different than Prop1")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

これが私の見解です:

@using (Html.BeginForm("ChangePassword", "Account", new { area = "" }, FormMethod.Post, new { id = "changePasswordForm" }))
{

    <a href="#" onclick="openChangePasswordDialog();">Change Password</a>
    <div id="dialogChangePassword" title="Change Password">
        <table>
            <tr>
                <td>@Html.LabelFor(m => m.OldPassword)
                </td>
                <td>@Html.PasswordFor(m => m.OldPassword)
                </td>
                <td>@Html.ValidationMessageFor(m => m.OldPassword)
                </td>
            </tr>
            <tr>
                <td>@Html.LabelFor(m => m.NewPassword)
                </td>
                <td>@Html.PasswordFor(m => m.NewPassword)
                </td>
                <td>@Html.ValidationMessageFor(m => m.NewPassword)
                </td>
            </tr>
            <tr>
                <td>@Html.LabelFor(m => m.ConfirmPassword)
                </td>
                <td>@Html.PasswordFor(m => m.ConfirmPassword)
                </td>
                <td>@Html.ValidationMessageFor(m => m.ConfirmPassword)
                </td>
            </tr>
        </table>
    </div>
}

これが私のJavaScriptです:

    var changePasswordDialogId = '#dialogChangePassword';
    var oldPasswordInput = '#changePasswordForm #OldPassword';
    var newPasswordInput = '#changePasswordForm #NewPassword';
    var confirmPasswordInput = '#changePasswordForm #ConfirmPassword';

    $(document).ready(function () {
        $(changePasswordDialogId).dialog(
    {
        autoOpen: false,
        autoResize: true,
        modal: true,
        open: function () {
            $(this).parent().appendTo("#changePasswordForm");
        },
        buttons: {
            Ok: function () {
                if ($(oldPasswordInput).valid() && $(newPasswordInput).valid() && $(confirmPasswordInput).valid()) {
                    alert('ready to post!');
                    $(changePasswordDialogId).dialog('close');
                }
            },
            Cancel: function () {
                $(changePasswordDialogId).dialog('close');
            }
        }
    });
});       //document.ready

function openChangePasswordDialog() {
    $(changePasswordDialogId).dialog('open');
}
4

2 に答える 2

0

検証アダプターを登録するのを忘れたようです

jQuery.validator.unobtrusive.adapters.add(
        'notequalto', ['other'], function (options) {
            options.rules['notEqualTo'] = '#' + options.params.other;
            if (options.message) {
                options.messages['notEqualTo'] = options.message;
            }
    });

どのダリン・ディミトロフが彼の答えで指定したか。

于 2013-07-29T15:33:06.593 に答える
0

わかりましたので、私の問題を見つけました。からの継承を見逃していIClientValidatable ました。これを追加したので、jQuery ダイアログでもクライアント側で動作します。

于 2013-07-29T16:13:40.303 に答える