9

我有一个控制器操作,它有一个可以为空的 DateTime 作为来自我表单上的文本框的参数之一。我注意到,如果用户在该文本框中输入“blah”,那么我将为 DateTime 参数返回一个 Null 值,并自动添加一个模型错误。在这种情况下,添加的 ModelState 错误是“值 'blah' 无效”。

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

4

4 回答 4

8

我必须强烈反对您迄今为止收到的所有答案。他们都没有真正回答您提出的问题,即如何本地化 MVC 错误消息。如果您没有真正本地化您的应用程序,您可能会花费大量精力来解决这个问题的单个实例,并且在其他 50 个 MVC 错误消息案例中仍然存在相同的问题。它们在 MvcResources.resx 中定义,该文件位于 MVC 源代码的 Resources 文件夹中(或者只是使用 Reflector 浏览程序集)。特别是,您正在寻找Common_ValueNotValidForProperty resource. You would localize these messages by providing a localized satellite assembly, in the same way that you localize any .NET application. The specifics of internationalization/localization in .NET applications are outside of the scope of this answer, but there are many books on the subject. Doing this in MVC is no different than doing it in any other application, except that, in most cases, localizations of the framework are already available. MVC is still in beta, so it is, as far as I know, English-only, at the moment. Presumably, that will change after release.

于 2009-02-16T14:51:35.907 回答
1

我会从您传递给 TryUpdateModel/Update 模型的白名单中删除该特定文本框,并“手动”对其进行验证,而不是让框架对其进行验证。或者,您可以尝试遍历 ModelState Error 集合,找到您要删除的那个,然后将其删除——比如说,一旦您确定要删除哪个,就使用 RemoveItem。

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

于 2009-02-14T23:01:12.590 回答
0

我可以调用ModelState.Clear(); 在动作开始时。但是,我不确定我是否喜欢在每个动作中都这样做。

于 2009-02-14T23:13:01.673 回答
0

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

public ActionResult Method(Datetime? date)
{} 

而不是

public ActionResult Method(Datetime date)
{}
于 2009-02-15T01:19:14.583 回答