Как отключить или заменить сообщение об ошибке ModelState по умолчанию в Asp.net MVC? - PullRequest
9 голосов
/ 15 февраля 2009

У меня есть действие контроллера, у которого в качестве одного из параметров указывается значение DateTime, которое приходит из текстового поля в моей форме. Я заметил, что если пользователь введет «бла» в этом текстовом поле, я получу значение Null для параметра DateTime, и автоматически добавится ошибка модели. В этом случае добавляется ошибка ModelState «Значение« бла »недопустимо».

Моя проблема в том, что мой сайт поддерживает несколько языков, поэтому мне нужно локализовать эту ошибку. Обычно я просто проверяю и добавляю ошибки ModelState самостоятельно, но в этом случае я не могу избавиться от них. Если я добавлю еще одну ошибку ModelState для того же текстового поля, она не появится.

Ответы [ 4 ]

8 голосов
/ 16 февраля 2009

Я должен категорически не согласиться со всеми ответами, которые вы получили до сих пор. Никто из них на самом деле не отвечает на заданный вами вопрос о том, как локализовать сообщения об ошибках MVC. Вы можете потратить немало усилий, работая над этим единственным случаем проблемы, и у вас все еще будет та же проблема с 50 другими случаями сообщений об ошибках MVC, если вы на самом деле не локализуете свое приложение. Они определены в MvcResources.resx, который находится в папке Resources исходного кода MVC (или просто просмотрите сборку с помощью Reflector). В частности, вы ищете ресурс Common_ValueNotValidForProperty. Вы бы локализовали эти сообщения, предоставив локализованную спутниковую сборку, точно так же, как вы локализуете любое приложение .NET. Особенности интернационализации / локализации в приложениях .NET выходят за рамки этого ответа, но есть много книг на эту тему. Выполнение этого в MVC ничем не отличается от выполнения в любом другом приложении, за исключением того, что в большинстве случаев локализация фреймворка уже доступна. MVC все еще находится в бета-версии, так что, насколько я знаю, на данный момент только на английском языке. Предположительно, это изменится после релиза.

1 голос
/ 15 февраля 2009

Я бы удалил это конкретное текстовое поле из белого списка, который вы передаете модели TryUpdateModel / Update, и проверил бы его «вручную», вместо того, чтобы проверять его с помощью фреймворка. В качестве альтернативы, вы можете попробовать выполнить итерацию по коллекции ошибок ModelState, найти ту, которую хотите удалить, и удалить ее - скажем, используя RemoveItem, как только вы выясните, от какой вы хотите избавиться.

РЕДАКТИРОВАТЬ : Если вы используете ModelBinder по умолчанию, вы можете реализовать свой собственный. Я предполагал, что, поскольку вы генерировали собственные ошибки модели, вы использовали TryUpdateModel / UpdateModel.

0 голосов
/ 15 февраля 2009

Вы можете сделать параметр DateTime обнуляемым. Тогда, если ничего не указано, ошибка не будет добавлена ​​в ModelState.

public ActionResult Method(Datetime? date)
{} 

вместо

public ActionResult Method(Datetime date)
{}
0 голосов
/ 15 февраля 2009

Я мог бы вызвать ModelState.Clear (); в начале действия. Но я не уверен, что мне нравится делать это в каждом действии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...