我在一个项目中使用ASP.NET MVC 3。
问题是,我想将一个值保存到数据库中,在保存到数据库之前,应该“清除”(比如删除尾随和结束空间,并进行验证)。
在使用数据注释将模型保存到数据库之前,我使用MetaData类来验证模型,使用以下代码进行验证:
if (ModelState.IsValid) {我的MetaData类如下所示:
public class OrganizationMD {
    [Required(ErrorMessage = "*This field is required.")]
    [CustomValidationRule(ErrorMessage = "*Another error message")]
    public string OrganizationNumber;
}我的第一个想法是给OrganizationNumber字符串一个getter和setter,然后让值变得“固定”。
例如,如果有人试图用"19860415-4785“作为组织编号来保存公司,那么在验证并将新值保存到数据库之前,它应该自动删除字符串中的尾随"19”和破折号。
我不能给这个模型一个getter和setter,因为我们正在使用模型-首先,,否则我认为这应该是可行的.
有人知道怎么解决这个问题吗?
发布于 2012-10-24 13:04:08
您可以创建一个视图模型来将数据传递给/来自视图和控制器,而不是直接使用域(实体框架)模型。
将数据注释放在视图模型的属性上。
public class OrganizationMDViewModel
{
    [Required(ErrorMessage = "*This field is required.")]
    [CustomValidationRule(ErrorMessage = "*Another error message")]
    public string OrganizationNumber {get; set;}
}然后,在映射回域模型以进行持久化之前,您可以在getter和setter中做任何您认为可以工作的事情。
为了便于阅读和调试,您可以在控制器中进行“清理”,而不是在getter和setter中,但这取决于您。
[HttpPost]
public ActionResult SaveData (OrganizationMDViewModel viewModel)
{
  if (ModelState.IsValid) {
    viewModel.OrganizationNumber...//clean up the value here
    OrganizationMD = new OrganizationMD{OrganizationNumber = viewModel.OrganizationNumber}
    //...and save
  }
}https://stackoverflow.com/questions/13048536
复制相似问题