串并MINLENGTH验证MAXLENGTH不工作(asp.net MVC) [英] String MinLength and MaxLength validation don't work (asp.net mvc)

查看:188
本文介绍了串并MINLENGTH验证MAXLENGTH不工作(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 =形横}))
{
    < D​​IV CLASS =模头>
        <按钮式=按钮级=关闭数据解雇=莫代尔ARIA隐藏=真>&安培;倍;< /按钮>
    < H4>Добавитьпользователя< / H4>
< / DIV>
< D​​IV CLASS =模体>    <! - 姓名 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Name)>Логин< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.TextBoxFor(型号=> model.Name,新{@class =span3ID =input_name})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Name)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 电子邮件 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Email)>电子邮件和LT; /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.TextBoxFor(型号=> model.Email,新{@class =span3ID =input_email})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Email)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 全名 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.FullName)>Имяпользователя< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.TextBoxFor(型号=> model.FullName,新{@class =span3ID =input_full_name})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.FullName)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 角色 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Role)>Рольпользователя< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.DropDownList(角色,(的SelectList)ViewBag.Roles,新{ID =input_role})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Role)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 电话 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Phone)>Контактныйтелефон< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.TextBoxFor(型号=> model.Phone,新{@class =span3ID =input_phone})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Phone)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 状态 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Status)>Статуспользователя< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.DropDownList(状态,(的SelectList)ViewBag.UserStatuses,新{ID =input_status})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Status)
            < / DIV>
        < / DIV>
    < / DIV>    <! - 密码 - >
    < D​​IV CLASS =控制组>
        <标签类=控制标签为=@ Html.NameFor(型号=> model.Password)>Парольпользователя< /标签>
        < D​​IV CLASS =控制>
            < D​​IV CLASS =输入 - prePEND>
                @ Html.TextBoxFor(型号=> model.Password,新{@class =span3ID =input_password})
                < BR />
                @ Html.ValidationMessageFor(型号=> model.Password)
            < / DIV>
        < / DIV>
    < / DIV>< / DIV>
< D​​IV 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">&times;</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 for MinLength and MaxLength 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆