0

我正在为我的项目使用ASP.NET MVC 3

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

在使用数据注释将模型保存到数据库之前,我使用MetaData 类来验证模型,使用以下代码进行验证:

if (ModelState.IsValid) {

我的元数据类如下所示:

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,因为我们正在使用 Model-First 进行开发,否则我认为应该可以。

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

4

1 回答 1

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
  }
}
于 2012-10-24T13:04:08.940 回答