繁体   English   中英

如何在Asp.net MVC中关闭或替换默认的ModelState错误消息?

[英]How do you turn off or replace the default ModelState error message in Asp.net MVC?

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

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

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

我会从您传递给TryUpdateModel / Update模型的白名单中删除该特定文本框并“手动”验证它,而不是让它通过框架验证。 或者,您可以尝试遍历ModelState错误集合,找到要删除的那个,并删除它 - 比如一旦找出想要删除的那个,请使用RemoveItem。

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

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

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

public ActionResult Method(Datetime? date)
{} 

而不是

public ActionResult Method(Datetime date)
{}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM