2009-02-14 116 views
9

我有一个控制器操作,它具有可为空的DateTime作为来自我的窗体上的文本框的参数之一。我注意到,如果用户要在该文本框中输入“blah”,那么我会为DateTime param返回一个Null值,并自动添加模型错误。在这种情况下,添加的ModelState错误是“值'等于'无效”。如何关闭或替换Asp.net MVC中的默认ModelState错误消息?

我的问题是我的网站支持多种语言,所以我需要本地化这个错误。通常我只是自己验证并添加ModelState错误,但在这种情况下,我似乎无法摆脱它。如果我为同一个文本框添加另一个ModelState错误,它不会显示。

回答

8

我有到现在为止你已经收到了答案的强烈反对。他们中没有一个真正回答你问的问题,这就是如何本地化MVC错误信息。如果您实际上没有本地化您的应用程序,您可能会花费很多精力来解决此问题的单个实例,并且仍然会遇到与其他50种MVC错误消息相同的问题。它们在MvcResources.resx中定义,它可以在MVC源代码的Resources文件夹中找到(或者只需使用Reflector浏览程序集)。特别是,您正在寻找Common_ValueNotValidForProperty资源。您可以通过提供本地化的附属程序集来本地化这些消息,就像本地化任何.NET应用程序一样。 .NET应用程序中的国际化/本地化的具体细节不在本答案的范围之内,但有很多关于此主题的书籍。在MVC中这样做与在任何其他应用程序中执行此操作没有什么不同,除了在大多数情况下,框架的本地化已经可用。 MVC目前仍处于测试阶段,据我所知,目前只有英文版本。据推测,这将在发布后改变。

1

我会从传递给TryUpdateModel/Update模型的白名单中删除特定的文本框,然后“手工”验证它,而不是让框架验证它。或者,您可以尝试遍历ModelState Error集合,找到想要删除的那个,并删除它 - 例如,在找出您想要删除哪一个的时候使用RemoveItem。

编辑:如果您使用默认的ModelBinder,您可以实现自己的。我假设,因为您正在生成自己的模型错误,您正在使用TryUpdateModel/UpdateModel。

0

我可以拨打ModelState.Clear();在行动的开始。但是,我不确定我喜欢在每个动作中都这样做。

0

您可以使DateTime参数为空。然后,如果没有提供,错误将不会被添加到ModelState中。

public ActionResult Method(Datetime? date) 
{} 

而不是

public ActionResult Method(Datetime date) 
{}