从MetaData类验证和修改变量

时间:2012-10-24 11:42:32

标签: asp.net-mvc-3

我正在使用 ASP.NET MVC 3 来完成我的项目。

问题是我想将一个值保存到数据库中,该数据库应该在保存到数据库之前进行“清理”(比如删除尾随和结尾空格,并验证)。

我使用元数据类来验证模型,然后使用以下代码验证:

使用数据注释将其保存到数据库中
if (ModelState.IsValid) {

我的MetaData类看起来像这样:

public class OrganizationMD {
    [Required(ErrorMessage = "*This field is required.")]
    [CustomValidationRule(ErrorMessage = "*Another error message")]
    public string OrganizationNumber;
}

我的第一个想法是给OrganizationNumber字符串一个getter和setter,让值变为“fixed”。

例如,如果有人试图以“19860415-4785”作为组织编号保存公司,它应该在验证并将该新值保存到数据库之前自动删除字符串中的尾随“19”和短划线。

我不能给模型一个getter和setter,因为我们正在使用Model-First开发,否则我认为应该有效。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以创建一个视图模型,将数据传递给视图和控制器,而不是直接使用域(实体框架)模型。

将您的数据注释放在视图模型的属性上。

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
  }
}