Razor 为什么我在提交表单之前看到验证消息
我已经创建了一个表单,当我加载带有它的页面时,我会在提交表单之前看到验证消息。为什么?你可以 而Razor 为什么我在提交表单之前看到验证消息,razor,asp.net-mvc-4,jquery-validate,unobtrusive-validation,Razor,Asp.net Mvc 4,Jquery Validate,Unobtrusive Validation,我已经创建了一个表单,当我加载带有它的页面时,我会在提交表单之前看到验证消息。为什么?你可以 而项是局部视图: @model MyMustAgreeValidation.Models.LabelEditorValidation <div class="editor-label"> @Model.Label </div> <div class="editor-field"> @Model.Editor @Model.Validation
项
是局部视图:
@model MyMustAgreeValidation.Models.LabelEditorValidation
<div class="editor-label">
@Model.Label
</div>
<div class="editor-field">
@Model.Editor
@Model.Validation
</div>
脚本包括:
<script src="/Scripts/jquery-1.7.1.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/Validation/EqualAttribute.js"></script>
EqualAttribute.js:
jQuery.validator.addMethod("equal", function (value, element, param) {
if($(element).attr("type")=="checkbox")
{
value = String($(element).attr("checked"));
param = param.toLowerCase();
}
return (value == param);
});
jQuery.validator.unobtrusive.adapters.addSingleVal("equal", "valuetocompare");
您是否在页面中包含了正确的validation.js文件?谢谢您的编辑。另一个“扔到墙上”,看看会发生什么想法:是否有任何自定义javascript会干扰输入,从而自动触发验证?非常好的代码。如果不使用自定义助手,是否存在问题?这应该是一个简单的测试。@TreyGramann在没有助手的情况下尝试:
@Html.LabelFor(m=>m.Password)@Html.EditorFor(m=>m.Password)@Html.ValidationMessageFor(m=>m.Password)
。相同的result@da7rutrak尝试禁用自定义非侵入性验证删除
。同样的结果
public class LabelEditorValidation
{
public MvcHtmlString Label { get; set; }
public MvcHtmlString Editor { get; set; }
public MvcHtmlString Validation { get; set; }
}
<script src="/Scripts/jquery-1.7.1.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/Validation/EqualAttribute.js"></script>
public class NewUserProfileModel : UserProfileModel, IValidatableObject
{
[Display(Name="Password", ResourceType = typeof(NewUserProfileRes))]
[DataType(DataType.Password)]
[Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(ErrorsRes))]
[StringLengthRange(6, 64, ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "InvalidStringLength")]
public string Password { get; set; }
[Display(Name="ConfirmPassword", ResourceType = typeof(NewUserProfileRes))]
[DataType(DataType.Password)]
[Compare("Password", ErrorMessageResourceType = typeof(NewUserProfileRes), ErrorMessageResourceName = "PasswordsDontMatch")]
public string ConfirmPassword { get; set; }
[Display(Name="AgreementAccepted", ResourceType = typeof(NewUserProfileRes))]
[Equal(true, ErrorMessageResourceType = typeof(NewUserProfileRes), ErrorMessageResourceName = "MustAgreeWithEULA")]
public bool AgreementAccepted { get; set; }
public NewUserProfileModel()
{
var property = GetType().GetProperty("Login");
var list = property.GetCustomAttributes(true);
foreach (var item in list)
{
Console.WriteLine(item);
}
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var userRepository = new UserRepository();
if (userRepository.IsLoginExists(Login))
{
yield return new ValidationResult(NewUserProfileRes.LoginAlreadyExists, new []{"Login"});
}
}
public class UserProfileModel
{
[Display(Name = "Login", ResourceType = typeof(UserProfileRes))]
[DataType(DataType.Text)]
[Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(ErrorsRes))]
[StringLengthRange(3, 64, ErrorMessageResourceName = "InvalidStringLength", ErrorMessageResourceType = typeof(ErrorsRes))]
public string Login { get; set; }
[Display(Name="DisplayName", ResourceType = typeof(UserProfileRes))]
[DataType(DataType.Text)]
[Required(ErrorMessageResourceName = "FieldIsRequired",
ErrorMessageResourceType = typeof(ErrorsRes))]
[StringLengthRange(3, 32,
ErrorMessageResourceName = "InvalidStringLength",
ErrorMessageResourceType = typeof(ErrorsRes))]
public string DisplayName { get; set; }
[Display(Name = "Email", ResourceType = typeof(UserProfileRes))]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "FieldIsRequired")]
[RegularExpression(@"[\w\.-]*[a-zA-Z0-9_]@[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]", ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "InvalidEmailAddress")]
[StringLength(64, ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "StringTooLong")]
public string Email { get; set; }
[Display(Name="Homepage", ResourceType = typeof(UserProfileRes))]
[DataType(DataType.Url)]
[RegularExpression(@"(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?", ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "IvalidUrl")]
[StringLength(96,
ErrorMessageResourceType = typeof(ErrorsRes), ErrorMessageResourceName = "StringTooLong")]
public string Homepage { get; set; }
}
jQuery.validator.addMethod("equal", function (value, element, param) {
if($(element).attr("type")=="checkbox")
{
value = String($(element).attr("checked"));
param = param.toLowerCase();
}
return (value == param);
});
jQuery.validator.unobtrusive.adapters.addSingleVal("equal", "valuetocompare");