这是我模特的一部分
public class Sensor
{
public int Id { get; set; }
[Required]
[MaxLength(40)]
public string Name { get; set; }
}
名称是一些文本,其最大长度为40个符号。在这个文本字段中可能只有很少的单词。
我的问题是可以在Name属性中设置单词的最大长度吗?
例如,有:"运动检测器"。我希望这个词最多8个符号。这意味着运动和检测器需要少于8个符号长度。用户无法像#" MotionDetector"其长度为12个符号。
答案 0 :(得分:4)
一种方法是你可以使用属性中的setter
来控制每个单词的最大长度:
set {
string[] words = value.Split(' ')
if (words.Any(x => x.Length > 8)){
//error, do something
} else { //OK, pass
Name = value; //only update Name if the length for all words are valid
}
}
答案 1 :(得分:3)
理想情况下,您应该在数据模型(由EF生成)和视图模型(用于绑定)之间进行明确分离。因此,您应根据视图模型定义验证用户数据,而不是数据模型定义。
在MVC
中,MaxLength
属性并非用于验证最大允许输入,StringLength
是验证属性,如解释here。
在您的特定情况下:
// this is the data model
public class Sensor
{
public int Id { get; set; }
[Required]
[MaxLength(40)]
public string Name { get; set; }
}
// this is the data model
public class SensorViewModel
{
public int Id { get; set; }
[Required]
[StringLength(8)]
public string Name { get; set; }
}
如果使用MVC
,则SensorViewModel
将是您的@model
。
要在Sensor
和SensorViewModel
之间轻松传输数据,可以使用自动库。例如。 AutoMapper
如果您没有使用MVC
,则可以选择WPF和Windows Forms。简而言之,您可以通过使用属性来避免简单验证的样板代码。