使用 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/