2009-12-08 105 views
0

我正在使用来自link text的MVC验证库。我选择这个库是因为我也使用.NetTiers,它使用MS企业库验证块生成所有的验证属性。MVC模型绑定

它工作正常,除了该模型绑定自动验证对象并填充验证摘要。我相信这是正常的行为。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register([Bind()]NetTiersObject obj) 
{ 
    return View(); 
} 

验证库还具有如下记载的方法:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register([Bind()]NetTiersObject obj) 
{ 
    try 
    { 
     obj.Validate<NetTiersObject>(); 
    } 
    catch (EntityValidationException ex) 
    { 
     ViewData.ModelState.PopulateWithErrors(ex); 
    } 
    return View(); 
} 

这也能正常工作。

我的问题是,当使用验证库的方法它重复错误消息。当只使用模型绑定时,错误消息显得很奇怪。错误在消息中具有属性名称。

所以,我想我应该要么格式化模型绑定错误消息,要么完全禁用模型绑定。

任何建议,帮助?

谢谢。

回答

0

我找到了为什么我的ModelState无效的答案。表单元素不匹配模型,这是ModelState立即失效的唯一方法。

如果我找到更多细节,我会更新这篇文章。

0

你有没有尝试:

/*At the Point the ModelState should be Valid(TRUE) 
     because we still didn't enforce any validations */ 
    var v = ModelState.IsValid; 

try 
    { 
     obj.Validate<NetTiersObject>(); 
    } 
    catch (EntityValidationException ex) 
    { 
     ViewData.ModelState.PopulateWithErrors(ex); 
    } 

,并检查v是真正的,也是应该的。 如果它是真的,那么obj.Validate<NetTiersObject>();做错了,因为它只填充重复的错误。

我的问题是使用 验证库的方法时,它 重复的错误消息。当 只是使用该模型绑定错误 消息出现奇怪。错误 在消息中具有属性名称。

它很奇怪,因为modelBinding不应该填充模型错误,至少如果您没有使用自定义模型绑定或尝试将数据保存到数据库而不验证字段。

+0

在您的第一个示例中,它立即无效。如果我将FormCollection作为操作参数传递,那么modelstate是有效的。没有自定义模型绑定,这只是验证时的一个问题。谢谢你的帮助。 – 2009-12-09 00:48:44