在 ASP.NET MVC 应用程序中,我有一个模型定义如下:
public class TestModel
{
private string _firstName;
[DisplayName("First Name")]
[StringLength(20)]
public string FirstName
{
get { return _firstName; }
set
{
if (!string.IsNullOrEmpty(value))
if (value.Length > 20)
throw new Exception("Too long");
_firstName = value;
}
}
}
在我的控制器更新操作方法中,我有以下代码:
[HttpPost]
public ActionResult Update()
{
var tm = new TestModel();
if (ModelState.IsValid)
{
if (TryUpdateModel(tm))
{
// Save to the DB
}
}
return View("Test", tm);
}
问题是,当我在视图中的文本框中输入一个超过 20 个字符的值时,我希望 MVC 不会尝试在我的模型上设置属性(然后抛出异常,因为它太长而无法放入数据库列)。在实际尝试设置属性之前,我会认为它会被 ModelState.IsValid 测试停止。
请注意,我在这里模拟一个实际的 ORM - LLBLGenPro - 这是它为具有长度的数据库列生成的属性所做的 - 如果您尝试设置一个太长的值,它会引发异常。
除了修改 LLBLGen 的模板,我应该如何解决这个问题?
这是 ASP.NET MVC 的正常行为吗?