【发布时间】:2011-08-07 00:59:38
【问题描述】:
我确定之前已经回答过这个问题,但我在过去三个小时里一直在寻找可接受的解决方案,但一直找不到任何东西,所以对于我确定是重复的问题,我深表歉意。
我有两个域对象,Player 和 Position。玩家有一个位置。我的域对象是使用 NHibernate 绑定到我的数据库的 POCO。我有一个需要播放器的添加操作,所以我使用的是内置模型绑定。在我看来,我有一个下拉列表,可让用户选择玩家的位置。下拉列表的值是职位的 Id。除了我的 Position 对象验证失败 (ModelState.IsValid) 之外,一切都被正确填充,因为在模型绑定时它只有一个 Id,没有其他必需的属性。
使用 ASP.NET MVC 2 解决此问题的首选解决方案是什么?
我尝试过的解决方案...
- 在我的控制器的 Add 操作中调用 ModelState.IsValid 之前,根据 Id 从数据库中获取位置。我无法让模型再次运行验证,因此 ModelState.IsValid 总是返回 false。
- 创建一个继承自默认绑定器的自定义 ModelBinder,并在调用基本绑定器后从数据库中获取位置。 ModelBinder 似乎正在做验证,所以如果我使用默认活页夹中的任何东西,我就会被冲洗掉。这意味着我必须完全滚动自己的活页夹并从表单中获取每个值......对于这样一个常见的用例来说,这似乎真的是错误且效率低下的。
我认为可能可行的解决方案,但我不知道该怎么做...
- 在 Player 中使用 Position 类时关闭验证。
- 编写自定义 ModelBinder 为大多数属性绑定利用默认绑定器,但让我在默认绑定器运行验证之前从数据库中获取位置。
那么,你们其他人是如何解决这个问题的呢?
谢谢,
丹
附:在我看来,仅针对这种情况在 Player 上设置 PositionId 并不是一个好的解决方案。必须以更优雅的方式解决。
【问题讨论】:
标签: c# asp.net-mvc nhibernate