微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/csharp/97555.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐