我在使用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; }
}
我遇到的问题是描述字段没有得到正确的验证。使用下面的代码,即使描述字段为空,我的模型也会被验证为OK,并且我会被重定向到控制器的索引页面。if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
else
{
return View();
}
如果我在描述字段上添加 RequiredAttribute,则我的模型被视为处于无效状态,我的表单被重新加载,并显示所需属性的默认错误消息。如果我随后编辑描述字段,则它会显示我在字符串长度属性中设置的验证错误消息。这个属性应该是这样工作的吗?虽然在属性上装饰必需属性不是问题,但似乎与直觉相反,因为该字段并非必需,我只想确保如果用户输入内容,则其位于字符串长度属性的范围内。