在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;
}
}
}在我的控制器Update操作方法中,我有以下代码:
[HttpPost]
public ActionResult Update()
{
var tm = new TestModel();
if (ModelState.IsValid)
{
if (TryUpdateModel(tm))
{
// Save to the DB
}
}
return View("Test", tm);
}问题是,当我在视图的文本框中输入一个超过20个字符的值时,我希望MVC不会尝试在我的模型上设置属性(然后抛出一个异常,因为它太长了,不适合DB列)。在实际尝试设置该属性之前,我会认为它会被ModelState.IsValid测试停止。
注意,我在这里模拟了一个实际的ORM - LLBLGenPro -它对具有长度的数据库列的生成属性执行的操作-如果您试图设置一个太长的值,它会抛出一个异常。
除了修改LLBLGen的模板之外,我还应该如何解决这个问题?
这是ASP.NET MVC的正常行为吗?
发布于 2012-06-12 19:53:41
正如所提供的,您的代码没有从视图接收模型实例,而您是在您的代码中创建类的实例,因此无法判断
这段代码:
var tm = new TestModel(); 创建Testmodel的实例,但它并没有绑定到从发布的表单接收到的值。您的操作应该基本如下所示
public ActionResult Update(TestModel model) 这是mvc将尝试验证的模型的实例。
也许您应该发布整个代码(包括视图),以查看是否缺少其他内容,但是使用到目前为止提供的代码,您将永远不会在存储库中更新表单值,也不会抛出异常,因为FirstName将保持为空。
https://stackoverflow.com/questions/10778574
复制相似问题