模型绑定类型转换验证

时间:2009-03-13 18:44:45

标签: asp.net-mvc validation

目前,我看到DefaultModelBinder错误,因为输入对于类型无效(int中的字符,无效日期等)我得到UI默认错误摘要“出错了......”但没有特定的错误消息,关于转换失败的具体属性。

例如,模型属性可能是将来需要发生的日期时间。它可能使用Validator属性进行修饰,该属性将给出错误“{Property}”是将来需要发生的日期。例4/15/2009“。该消息仍可能与类型转换错误相关。

如果在模型绑定期间类型转换失败,如何提供描述性错误消息?自定义模型粘合剂,过滤器,任何示例都将不胜感激。

旁注:我一直在测试NHib Val,Castle Val,xVal Lib和其他更多手动方法的实现,所有这些对我来说都很好,但我不认为这些对我有帮助类型转换问题......

更新: 我在MVC Codeplex问题列表中找到了涉及S. Sanderson(xVal的创建者)的交换。它更详细地讨论了我所看到的问题...... http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=3230

1 个答案:

答案 0 :(得分:0)

我个人喜欢使用属性和c#代码在实体中进行验证,所以我认为以下方法至少值得一看:

http://codebetter.com/blogs/david.hayden/archive/2009/01/31/asp-net-mvc-and-validation-using-idataerrorinfo-and-validation-application-block.aspx

它使实体实现IDataErrorInfo。除了检查每个属性的验证属性之外,您还可以检查空值或无效的强制转换或任何其他自定义逻辑,如下所示:

当它发生时:

public string this[string columnName]
    {
        get 
        {
            return DoValidation(columnName);
        }
    }

您可以执行以下操作:

public string this[string columnName]
    {
        get 
        {
            if(columnName=="myDatePropertyName")
            {
               //Add custom logic (invalid casts or whatever)
            }
            return DoValidation(columnName);
        }
    }

我不喜欢这个模型,例如,必须在每个属性中放置验证错误消息,但这是一个很好的开始。

无论如何,这是一个将自定义错误绑定到相关属性的模型示例,因此稍后会在ValidationSummary上显示。

希望这有帮助!