c# – StringLengthAttribute如何工作?

前端之家收集整理的这篇文章主要介绍了c# – StringLengthAttribute如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用实体框架和ASP.NET MVC3验证我的模型时,我无法使用StringLengthAttribute.

我的模型是基于一个实体框架实体,它有一个部分类,它使用MetadataType属性来告诉MVC在搜索元数据时使用哪种类型.这在下面的代码显示

[MetadataType(typeof(PartMetadata))]
public partial class Part { }

class PartMetadata
{
    [DisplayName("Part number")]
    [required(ErrorMessage="* required")]
    [StringLength(50,MinimumLength = 3,ErrorMessage = "* Part numbers must be between 3 and 50 character in length.")]
    public string Number { get; set; }

    [StringLength(255,MinimumLength=3,ErrorMessage="* Part descriptions must be between 3 and 255 characters in length.")]
    public string Description { get; set; }

    [DisplayName("Drawing required?")]
    public bool Drawingrequired { get; set; }
}

我遇到的问题是描述字段未被正确验证.使用我的模型下面的代码是有效的,我被重定向到我的控制器的索引页,即使说明字段留空.

if (ModelState.IsValid)
{
    return RedirectToAction("Index");
 }
 else
 {
     return View();
  }

如果我将一个requiredAttribute添加到描述字段,那么我的模型被归类为无效状态,并且我的表单被重新加载,显示所需属性的默认错误消息.如果我随后编辑说明字段,则显示我在字符串长度属性中设置的验证错误消息.

属性应该如何表现?使用所需属性装饰属性并不是问题,但是似乎不符合直觉,因为该字段不是必需的.我只想确保如果用户输入一些东西,那么它在字符串长度属性的范围内.

解决方法

是的,这是正确的行为. StringLength验证字符串是否为一定长度,但不要求输入字符串.使用[必需]进行装饰描述,这样既有字符串的要求,而StringLength也将为字符串长度提供约束.

猜你在找的C#相关文章