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也将为字符串长度提供约束.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...