0

我正在使用带有数据注释的 linq to SQL 和 MVC2,并且在验证某些类型时遇到了一些问题。

例如:

[DisplayName("Geplande sessies")]
[PositiefGeheelGetal(ErrorMessage = "Ongeldige ingave. Positief geheel getal verwacht")]
public string Proj_GeplandeSessies { get; set; }

这是一个整数,我正在验证从表单中获取一个正数。

public class PositiefGeheelGetalAttribute : RegularExpressionAttribute {
    public PositiefGeheelGetalAttribute() : base(@"\d{1,7}") { }
}

现在的问题是,当我在输入中写入文本时,我看不到这个错误,但我从模型绑定器中得到错误消息,说“值'明天'对 Geplande sessies 无效。”

控制器中的代码:

[HttpPost]
public ActionResult Create(Projecten p)
{
    if (ModelState.IsValid)
    {
        _db.Projectens.InsertOnSubmit(p);
        _db.SubmitChanges();

        return RedirectToAction("Index");
    }
    else
    {
        SelectList s = new SelectList(_db.Verbonds, "Verb_ID", "Verb_Naam");
        ViewData["Verbonden"] = s;
    }

    return View();
}

我想要的是能够在模型绑定器之前运行数据注释,但这听起来几乎是不可能的。我真正想要的是我自己编写的错误消息出现在屏幕上。

我对 DateTime 有同样的问题,我希望用户以特定的形式 'dd/MM/yyyy' 编写它,并且我有一个正则表达式。但同样,当数据注释完成他们的工作时,我得到的只是一个 DateTime 对象,而不是原始字符串。因此,如果输入不是日期,则正则表达式甚至不会运行,因为数据注释只是得到一个空值,因为模型绑定器无法使其成为 DateTime。

有谁知道如何使这项工作?

4

1 回答 1

2

两种选择:

(1) 您可以制作一个所有字段都是字符串的 Projecten viewModel。这样,viewModel 将始终从发布的数据创建,并且您的数据注释验证将始终被评估。显然,您可能会使用 AutoMapper 将 viewModel 映射到正确类型的业务对象。

(2) 您可以对模型绑定器进行子类化。

于 2010-02-18T15:09:17.417 回答