ASP.NET MVC3是否有可能在不调用属性验证属性指定的验证的情况下从FormCollection
设置视图模型的属性?
UpdateModel<T>(T model)
也会调用验证。
背景:
如果存在与数据库的连接,我只能验证模型,但只有来自一个特定表单字段的数据正确(每个组织的访问代码类型)才能建立此连接。如果未建立连接,则抛出异常。
当在此字段中输入的数据不正确时,我不想丢失在所有其他表单字段中输入的值,而是再次向用户显示已输入的值,并对其进行更改以更正错误。< / p>
所以我需要的是基本上像条件验证或模型绑定器根本没有验证。 ASP.NET MVC中是否有类似内置的东西,还是需要编写自己的UpdateModel方法,调用(自定义)模型绑定器?
答案 0 :(得分:2)
为什么不将viewmodel传递给你的方法,而不是formscollection?这样你可以做到
[HttpPost]
public ActionResult Update(UpdateViewModel model)
{
if (!Model.IsValid)
{
return View(model);
}
}
因此,如果验证失败,您的用户将被定向回更新视图,模型已经从他们提交的信息中填充。
现在,在我看来,拥有验证属性需要数据库连接,而这反过来可能会抛出异常是错误的方法。我将这些验证转移到验证服务,验证服务被注入控制器(并通过DI获取所需的存储库内容)。每个验证服务都将接受一个视图模型并返回一个ValidationResult实例的集合,然后我通过validation result将它们附加到模型extension method到Controller类(两者都从Project Silk的东西中取出) P&amp; P正在推出)
这样可以更轻松地进行测试,因为您可以模拟存储库并让它返回正确的测试结果...