没有验证的UpdateModel
本文关键字:UpdateModel 验证 | 更新日期: 2023-09-27 18:03:57
是否有可能在ASP。. NET MVC3从FormCollection
设置视图模型的属性,而不调用由属性上的验证属性指定的验证?UpdateModel<T>(T model)
也调用验证
如果存在到数据库的连接,我只能验证模型,但是只有在来自一个特定表单字段的数据正确(类似于每个组织的访问代码)的情况下,才能建立此连接。如果连接未建立,则抛出异常。
当在这个字段中输入的数据不正确时,我不想丢失在所有其他表单字段中输入的值,而是将已经输入的值再次呈现给用户,并给他一个更改以纠正错误。
我需要的基本上是条件验证或者模型绑定器根本不需要验证。有没有类似的东西内置在ASP。或者我需要写我自己的UpdateModel方法,调用(自定义)模型绑定器?
为什么不传递视图模型到你的方法,而不是formscollection?这样你就可以
[HttpPost]
public ActionResult Update(UpdateViewModel model)
{
if (!Model.IsValid)
{
return View(model);
}
}
因此,如果验证失败,您的用户将被引导回Update视图,模型已经根据他们提交的信息填充。
现在,在我看来,拥有一个验证属性需要一个数据库连接,这反过来会抛出异常,这是错误的方法。我将这些类型的验证转移到验证服务,该服务被注入到控制器中(并通过DI接收所需的存储库内容)。每个验证服务将接受一个视图模型并返回ValidationResult实例集合,然后我通过Controller类的扩展方法将其附加到模型验证结果上(两者都是从Project Silk的东西MS P&P推出的)
这允许更容易的测试,因为您可以模拟存储库并让它返回正确的测试结果…