Asp.net mvc 3 仅在提交时获取MVC3中的自定义验证属性,而不是在输入失去焦点时
我希望MVC 3中的一些自定义验证属性仅在提交时触发,而不是在输入失去焦点时触发 这是我的自定义验证属性Asp.net mvc 3 仅在提交时获取MVC3中的自定义验证属性,而不是在输入失去焦点时,asp.net-mvc-3,validationattribute,Asp.net Mvc 3,Validationattribute,我希望MVC 3中的一些自定义验证属性仅在提交时触发,而不是在输入失去焦点时触发 这是我的自定义验证属性 #region Password Match Validation Attribute public sealed class PasswordPresent : ValidationAttribute, IClientValidatable { private const string _defaultErrorMessage = "Current Pas
#region Password Match Validation Attribute
public sealed class PasswordPresent : ValidationAttribute, IClientValidatable
{
private const string _defaultErrorMessage = "Current Password no present";
private string _basePropertyName;
public PasswordPresent(string basePropertyName)
: base(_defaultErrorMessage)
{
_basePropertyName = basePropertyName;
}
public override string FormatErrorMessage(string name)
{
return string.Format(_defaultErrorMessage, name, _basePropertyName);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var basePropertyInfo = validationContext.ObjectType.GetProperty(_basePropertyName);
var oldPassword = (string)basePropertyInfo.GetValue(validationContext.ObjectInstance, null);
var newPassword = (string)value;
if (!string.IsNullOrEmpty(newPassword) && string.IsNullOrEmpty(oldPassword))
{
var message = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(message);
}
return null;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules
(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
//This string identifies which Javascript function to be executed to validate this
rule.ValidationType = "passwordpresent";
rule.ValidationParameters.Add("otherfield", _basePropertyName);
yield return rule;
}
}
#endregion
这是我的模型
public class UserSettingsModel
{
[Display(Name = "Old Password")]
[PasswordPresent("NewPassword",ErrorMessage = "Please enter in a New Password")]
public string CurrentPassword { get; set; }
[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")]
[PasswordsMatch("NewPassword",ErrorMessage = "Confirm password and New Password do not match")]
public string ConfirmPassword { get; set; }
}
这是我的观点
@model Data.Models.UserSettingsModel
<div id="UserSettings">
@using (Ajax.BeginForm("UpdateSettings", "AccountManagement", new AjaxOptions() {UpdateTargetId = "UserSettings", HttpMethod = "Post" }))
{
@Html.ValidationSummary(true)
<div class="tabs" id="userTab3">
<fieldset>
<div>
<h3>
Change Password</h3>
<div class="editor-label">
@Html.LabelFor(model => model.CurrentPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CurrentPassword)
@Html.ValidationMessageFor(model => model.CurrentPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NewPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.NewPassword)
@Html.ValidationMessageFor(model => model.NewPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ConfirmPassword)
@Html.ValidationMessageFor(model => model.ConfirmPassword)
</div>
</div>
<p>
<input type="submit" value="Save & Continue" name="btnsubmit" />
</p>
</fieldset>
</div>
}
</div>
@model Data.Models.UserSettingsModel
@使用(Ajax.beginnform(“UpdateSettings”、“AccountManagement”、新的AjaxOptions(){UpdateTargetId=“UserSettings”,HttpMethod=“Post”}))
{
@Html.ValidationSummary(true)
修改密码
@LabelFor(model=>model.CurrentPassword)
@Html.EditorFor(model=>model.CurrentPassword)
@Html.ValidationMessageFor(model=>model.CurrentPassword)
@LabelFor(model=>model.NewPassword)
@EditorFor(model=>model.NewPassword)
@Html.ValidationMessageFor(model=>model.NewPassword)
@LabelFor(model=>model.ConfirmPassword)
@EditorFor(model=>model.ConfirmPassword)
@Html.ValidationMessageFor(model=>model.ConfirmPassword)
}
假设您使用的是jQuery验证插件,则需要对其进行修改,使其仅绑定到提交按钮/表单提交。检查此线程:
干杯,伙计。非常感谢。
@model Data.Models.UserSettingsModel
<div id="UserSettings">
@using (Ajax.BeginForm("UpdateSettings", "AccountManagement", new AjaxOptions() {UpdateTargetId = "UserSettings", HttpMethod = "Post" }))
{
@Html.ValidationSummary(true)
<div class="tabs" id="userTab3">
<fieldset>
<div>
<h3>
Change Password</h3>
<div class="editor-label">
@Html.LabelFor(model => model.CurrentPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CurrentPassword)
@Html.ValidationMessageFor(model => model.CurrentPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NewPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.NewPassword)
@Html.ValidationMessageFor(model => model.NewPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ConfirmPassword)
@Html.ValidationMessageFor(model => model.ConfirmPassword)
</div>
</div>
<p>
<input type="submit" value="Save & Continue" name="btnsubmit" />
</p>
</fieldset>
</div>
}
</div>