在ASP.NET MVC應用程序,我已經定義爲模型如下:爲什麼當我的字符串太長時,MVC會在我的模型上調用set方法?
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的正常行爲嗎?