串并MINLENGTH验证MAXLENGTH不工作(asp.net MVC) [英] String MinLength and MaxLength validation don't work (asp.net mvc)
问题描述
我有这个类
使用System.ComponentModel.DataAnnotations;
使用Argussoft.BI.DAL.Domain.Users;命名空间Argussoft.BI.DAL.DTOs.UserDTOs
{
公共类CreateUserDto
{
[必需(的ErrorMessage =Введителогин)]
[MAXLENGTH(User.EmailLength,的ErrorMessage =Максимальнаядлиналогина40символов)]
[RegularEx pression(User.NameRegularEx pression,的ErrorMessage =Логинможетсодержатьтольколатинскиесимволы,дефисы,подчеркивания,точки)]
公共字符串名称{;组; } [必需(的ErrorMessage =Введите电子邮件)]
[MAXLENGTH(User.EmailLength,的ErrorMessage =Максимальнаядлинаадресаэлектроннойпочты100символов)]
[RegularEx pression(User.EmailRegularEx pression,的ErrorMessage =Введитекорректныйадресэлектроннойпочты)]
公共虚拟字符串电子邮件{获得;组; } [必需(的ErrorMessage =Введитеимяпользователя)]
[MAXLENGTH(User.FullNameLength,的ErrorMessage =Максимальнаядлинаименипользователя100символов)]
[RegularEx pression(User.NameRegularEx pression,的ErrorMessage =Имяпользователяможетсодержатьтольколатинскиесимволы,дефисы,подчеркивания,точки)]
公共虚拟字符串全名{获得;组; } 公共虚拟INT角色{搞定;组; } [RegularEx pression(User.PhoneRegularEx pression,的ErrorMessage =Введитекорректныйномертелефона)]
公共虚拟字符串电话{搞定;组; } 公共虚拟INT状态{搞定;组; } [必需(的ErrorMessage =Введитепароль)]
[MINLENGTH个(User.PasswordMinLength,的ErrorMessage =Минимальнаядлинапароля5символов)]
[MAXLENGTH(User.PasswordMaxLength,的ErrorMessage =Максимальнаядлинапароля20символов)]
[RegularEx pression(User.PasswordRegularEx pression,的ErrorMessage =Парольможетсодержатьтольколатинскиесимволы,дефисы,подчеркивания,точки)]
公共虚拟字符串密码{搞定;组; }
}
}
这种形式
@model Argussoft.BI.DAL.DTOs.UserDTOs.CreateUserDto@using(Ajax.BeginForm(CREATEUSER,用户,新AjaxOptions {=的onSuccessonSuccessCreateUser},{新的id =dialog_form,@class =形横}))
{
< DIV CLASS =模头>
<按钮式=按钮级=关闭数据解雇=莫代尔ARIA隐藏=真>&安培;倍;< /按钮>
< H4>Добавитьпользователя< / H4>
< / DIV>
< DIV CLASS =模体> <! - 姓名 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Name)>Логин< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.TextBoxFor(型号=> model.Name,新{@class =span3ID =input_name})
< BR />
@ Html.ValidationMessageFor(型号=> model.Name)
< / DIV>
< / DIV>
< / DIV> <! - 电子邮件 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Email)>电子邮件和LT; /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.TextBoxFor(型号=> model.Email,新{@class =span3ID =input_email})
< BR />
@ Html.ValidationMessageFor(型号=> model.Email)
< / DIV>
< / DIV>
< / DIV> <! - 全名 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.FullName)>Имяпользователя< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.TextBoxFor(型号=> model.FullName,新{@class =span3ID =input_full_name})
< BR />
@ Html.ValidationMessageFor(型号=> model.FullName)
< / DIV>
< / DIV>
< / DIV> <! - 角色 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Role)>Рольпользователя< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.DropDownList(角色,(的SelectList)ViewBag.Roles,新{ID =input_role})
< BR />
@ Html.ValidationMessageFor(型号=> model.Role)
< / DIV>
< / DIV>
< / DIV> <! - 电话 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Phone)>Контактныйтелефон< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.TextBoxFor(型号=> model.Phone,新{@class =span3ID =input_phone})
< BR />
@ Html.ValidationMessageFor(型号=> model.Phone)
< / DIV>
< / DIV>
< / DIV> <! - 状态 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Status)>Статуспользователя< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.DropDownList(状态,(的SelectList)ViewBag.UserStatuses,新{ID =input_status})
< BR />
@ Html.ValidationMessageFor(型号=> model.Status)
< / DIV>
< / DIV>
< / DIV> <! - 密码 - >
< DIV CLASS =控制组>
<标签类=控制标签为=@ Html.NameFor(型号=> model.Password)>Парольпользователя< /标签>
< DIV CLASS =控制>
< DIV CLASS =输入 - prePEND>
@ Html.TextBoxFor(型号=> model.Password,新{@class =span3ID =input_password})
< BR />
@ Html.ValidationMessageFor(型号=> model.Password)
< / DIV>
< / DIV>
< / DIV>< / DIV>
< DIV CLASS =模式躯>
< A HREF =@ Url.Action(UserIndex,用户)级=BTN>Отменить< / A>
<按钮式=提交ID =save_button级=BTN BTN-小学>Сохранить< /按钮>
< / DIV>
}
但我的验证只能所需和 RegularEx pression
和 MINLENGTH个
不工作, 最大长度
我不明白在这种情况下任何错误消息。
什么可能是一个原因?
<一个href=\"http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.maxlengthattribute%28v=vs.103%29.aspx\">MaxLength用于实体框架来决定如何大,以使一个字符串值字段时,它会创建数据库。
从MSDN:
指定数组的最大长度
还是允许在属性字符串数据。
块引用><一个href=\"http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx\">StringLength是将被用于用户输入的验证数据注解
从MSDN:
指定的最小和最大
字符长度被允许
在一个数据字段
块引用>非定制
使用
[字符串长度]
[RegularEx pression(@^ {5} $,最少需要3个字符的ErrorMessage =)
[必需的(=的ErrorMessage必需)]
[StringLength(30,MinimumLength = 3的ErrorMessage =无效)]
30是最大长度结果最小长度= 3
块引用>自定义StringLengthAttribute类
公共类MyStringLengthAttribute:StringLengthAttribute
{
公共MyStringLengthAttribute(INT maximumLength)
:基地(maximumLength)
{
} 公众覆盖BOOL的IsValid(对象的值)
{
字符串VAL = Convert.ToString(值);
如果(val.Length&LT; base.MinimumLength)
base.ErrorMessage =最小长度应该是3;
如果(val.Length&GT; base.MaximumLength)
base.ErrorMessage =最大长度应当是6;
返回base.IsValid(值);
}
}公共类MyViewModel
{
[MyStringLength(6,MinimumLength = 3)]
公共字符串myProperty的{搞定;组; }
}I have this class
using System.ComponentModel.DataAnnotations; using Argussoft.BI.DAL.Domain.Users; namespace Argussoft.BI.DAL.DTOs.UserDTOs { public class CreateUserDto { [Required(ErrorMessage = "Введите логин")] [MaxLength(User.EmailLength, ErrorMessage = "Максимальная длина логина 40 символов")] [RegularExpression(User.NameRegularExpression, ErrorMessage = "Логин может содержать только латинские символы, дефисы, подчеркивания, точки")] public string Name { get; set; } [Required(ErrorMessage = "Введите Email")] [MaxLength(User.EmailLength, ErrorMessage = "Максимальная длина адреса электронной почты 100 символов")] [RegularExpression(User.EmailRegularExpression, ErrorMessage = "Введите корректный адрес электронной почты")] public virtual string Email { get; set; } [Required(ErrorMessage = "Введите имя пользователя")] [MaxLength(User.FullNameLength, ErrorMessage = "Максимальная длина имени пользователя 100 символов")] [RegularExpression(User.NameRegularExpression, ErrorMessage = "Имя пользователя может содержать только латинские символы, дефисы, подчеркивания, точки")] public virtual string FullName { get; set; } public virtual int Role { get; set; } [RegularExpression(User.PhoneRegularExpression, ErrorMessage = "Введите корректный номер телефона")] public virtual string Phone { get; set; } public virtual int Status { get; set; } [Required(ErrorMessage = "Введите пароль")] [MinLength(User.PasswordMinLength, ErrorMessage = "Минимальная длина пароля 5 символов")] [MaxLength(User.PasswordMaxLength, ErrorMessage = "Максимальная длина пароля 20 символов")] [RegularExpression(User.PasswordRegularExpression, ErrorMessage = "Пароль может содержать только латинские символы, дефисы, подчеркивания, точки")] public virtual string Password { get; set; } } }
and this form
@model Argussoft.BI.DAL.DTOs.UserDTOs.CreateUserDto @using (Ajax.BeginForm("CreateUser", "User", new AjaxOptions { OnSuccess = "onSuccessCreateUser" }, new { id = "dialog_form", @class = "form-horizontal" })) { <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4>Добавить пользователя</h4> </div> <div class="modal-body"> <!-- Name --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Name)">Логин</label> <div class="controls"> <div class="input-prepend"> @Html.TextBoxFor(model => model.Name, new { @class = "span3", id = "input_name" }) <br /> @Html.ValidationMessageFor(model => model.Name) </div> </div> </div> <!-- Email --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Email)">Email</label> <div class="controls"> <div class="input-prepend"> @Html.TextBoxFor(model => model.Email, new { @class = "span3", id = "input_email" }) <br /> @Html.ValidationMessageFor(model => model.Email) </div> </div> </div> <!-- FullName --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.FullName)">Имя пользователя</label> <div class="controls"> <div class="input-prepend"> @Html.TextBoxFor(model => model.FullName, new { @class = "span3", id = "input_full_name" }) <br /> @Html.ValidationMessageFor(model => model.FullName) </div> </div> </div> <!-- Role --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Role)">Роль пользователя</label> <div class="controls"> <div class="input-prepend"> @Html.DropDownList("Role", (SelectList)ViewBag.Roles,new{id ="input_role"}) <br /> @Html.ValidationMessageFor(model => model.Role) </div> </div> </div> <!-- Phone --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Phone)">Контактный телефон</label> <div class="controls"> <div class="input-prepend"> @Html.TextBoxFor(model => model.Phone, new { @class = "span3", id = "input_phone" }) <br /> @Html.ValidationMessageFor(model => model.Phone) </div> </div> </div> <!-- Status --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Status)">Статус пользователя</label> <div class="controls"> <div class="input-prepend"> @Html.DropDownList("Status", (SelectList)ViewBag.UserStatuses,new{id ="input_status"}) <br /> @Html.ValidationMessageFor(model => model.Status) </div> </div> </div> <!-- Password --> <div class="control-group"> <label class="control-label" for="@Html.NameFor(model => model.Password)">Пароль пользователя</label> <div class="controls"> <div class="input-prepend"> @Html.TextBoxFor(model => model.Password, new { @class = "span3", id = "input_password" }) <br /> @Html.ValidationMessageFor(model => model.Password) </div> </div> </div> </div> <div class="modal-footer"> <a href="@Url.Action("UserIndex", "User")" class="btn">Отменить</a> <button type="submit" id="save_button" class="btn btn-primary">Сохранить</button> </div> }
but my validation works only for Required and
RegularExpression
and doesn't work forMinLength
andMaxLength
and I don't get any error message in this case.What can be a reason?
解决方案MaxLength is used for the Entity Framework to decide how large to make a string value field when it creates the database.
From MSDN:
Specifies the maximum length of array or string data allowed in a property.
StringLength is a data annotation that will be used for validation of user input.
From MSDN:
Specifies the minimum and maximum length of characters that are allowed in a data field.
Non Customized
Use
[String Length]
[RegularExpression(@"^.{5,}$", ErrorMessage = "Minimum 3 characters required")] [Required(ErrorMessage = "Required")] [StringLength(30, MinimumLength = 3, ErrorMessage = "Invalid")]
30 is the Max Length
Minimum length = 3
Customized StringLengthAttribute Class
public class MyStringLengthAttribute : StringLengthAttribute { public MyStringLengthAttribute(int maximumLength) : base(maximumLength) { } public override bool IsValid(object value) { string val = Convert.ToString(value); if (val.Length < base.MinimumLength) base.ErrorMessage = "Minimum length should be 3"; if (val.Length > base.MaximumLength) base.ErrorMessage = "Maximum length should be 6"; return base.IsValid(value); } } public class MyViewModel { [MyStringLength(6, MinimumLength = 3)] public String MyProperty { get; set; } }
这篇关于串并MINLENGTH验证MAXLENGTH不工作(asp.net MVC)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!