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');
}