Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 仅在提交时获取MVC3中的自定义验证属性,而不是在输入失去焦点时_Asp.net Mvc 3_Validationattribute - Fatal编程技术网

Asp.net mvc 3 仅在提交时获取MVC3中的自定义验证属性,而不是在输入失去焦点时

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

我希望MVC 3中的一些自定义验证属性仅在提交时触发,而不是在输入失去焦点时触发

这是我的自定义验证属性

 #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>