使用 Entity Framework 和ASP.NET MVC3验证模型时,无法使用StringLengthAttribute。

我的模型基于Entity Framework实体,该实体具有一个子类,该子类使用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; }
}

我遇到的问题是描述字段未正确验证。使用下面的代码验证我的模型是否正确,即使描述字段为空,我也被重定向到 Controller 的“索引”页面。
if (ModelState.IsValid)
{
    return RedirectToAction("Index");
 }
 else
 {
     return View();
  }

如果我在说明字段中添加了RequiredAttribute,那么我的模型将被分类为处于无效状态,并且将重新加载我的表单,其中显示了required属性的默认错误消息。如果随后我编辑描述字段,那么它会显示我在字符串长度属性中设置的验证错误消息。

这是属性的行为方式吗?用必需的属性修饰属性不是问题,但是由于不需要该字段,因此似乎违反直觉。我只想确保如果用户输入了某些内容,则该字符将落在字符串长度属性的范围内。

最佳答案

是的,这是正确的行为。 StringLength验证字符串是否有一定长度,但是不需要来输入字符串。用[Required]修饰Description,以便对字符串有一个要求,并且StringLength将提供对字符串长度的约束。

关于c# - StringLengthAttribute如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7820815/

10-10 00:24