首先一些背景的:处理与ModelBinder的无效值在ASP.NET MVC 1.0
我有一个表格,在这里我回来后的一些对象由MVCS自动物化为对象的内置模型绑定器:
<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);
另外:我想强调,我们要发布帖子的DTO(DataTransferObjects),我们进一步的路线图到实体框架的实体,所以我们宁愿不喜欢,除了可能增加对DTO的改变任何东西属性。
问题
如果用户输入为“小时”的值无效,说“FUBAR”,那么ModelBinder的自然不会尝试设置“Hours'属性。但它默认为0,因为它是int而不是字符串。
这对我来说现在造成了一些困难,因为现在我看不到用户是否实际输入了0,或者这是否是由无效输入引起的。
因为我正在使用家庭对象 - 实体(实体框架)映射器,我们无法将“小时”属性的脚印更改为int?。我知道MVC有一些内置的验证,但我们宁可不实现,因为我们知道它已经受到了严重的攻击,并且ASP.NET MVC 2.0中还有一些新的验证。
解决方案?
我需要能够指出用户哪个字段是不正确的,这意味着我需要能够捕获一个异常(或可能是一些其他巧妙的解决方案?),在那里我可以做一些逻辑并向用户发回新视图,以澄清他们错误地做了什么。
我目前的想法:编写一个自定义的ModelBinder。
你有什么建议?
是的,我不会那样做;)..但感谢您的输入 – CodeMonkey 2010-01-27 23:06:40