Почему мое сообщение проверки является общим? ASP.NET MVC - PullRequest
2 голосов
/ 21 августа 2009

Я написал собственный обработчик проверки для этого приложения ASP.NET MVC. Вот скриншот сообщений проверки:

alt text

Как видите, название и режиссер работают нормально, а дата - нет. Код, который я имею для представления Create:

<fieldset>
    <legend>Fields</legend>
    <p>
        <%= Html.Label("Title", "Title:") %>
        <%= Html.TextBox("Title") %>
        <%= Html.ValidationMessage("Title", "*") %>
    </p>
    <p>
        <%= Html.Label("Director", "Director:")%>
        <%= Html.TextBox("Director") %>
        <%= Html.ValidationMessage("Director", "*") %>
    </p>
    <p>
        <%= Html.Label("ReleaseDate", "Release Date:")%>
        <%= Html.TextBox("ReleaseDate") %>
        <%= Html.ValidationMessage("ReleaseDate", "*") %>
    </p>
    <p>
        <%= Html.Submit("Create") %>
    </p>
</fieldset>

и вот код, который обрабатывает логику проверки:

public bool ValidateMovie(Movie movieToValidate)
{
    if (movieToValidate.Title.Trim().Length == 0)
        _validationDictionary.AddError("Title", "Title is required.");

    if (movieToValidate.Director.Trim().Length == 0)
        _validationDictionary.AddError("Director", "Director is required.");

    if (movieToValidate.ReleaseDate.ToString().Trim().Length == 0)
        _validationDictionary.AddError("ReleaseDate", "Release Date is required.");

    return _validationDictionary.IsValid;
}

Я предположил, что значение ключа для словаря проверки должно соответствовать значению, которое предоставляется для поля (в данном случае ReleaseDate), но, похоже, для меня это не происходит. Я также попытался добавить пробел между словами, если он искал его по отображаемому имени, но там тоже не повезло.

Может кто-нибудь помочь мне в этом?

Редактировать

Следуя предложению Джозефа , я прошелся по приложению, чтобы посмотреть, где произошла другая ошибка проверки. К сожалению, я не нашел никаких подсказок ... по крайней мере, для меня очевидно. Вот скриншот моего окна просмотра:

alt text

Как и ожидалось, здесь есть три ключа: название, каталог и дата выпуска. Никаких признаков четвертой (третьей в списке? См. Первый скриншот) ошибки проверки.

Любые дополнительные предложения будут оценены! Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 августа 2009

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

Вы также можете сделать свойство ReleaseDate обнуляемым (DateTime?), А затем просто проверить, что указана дата. Это может быть самое простое изменение, если это возможно, хотя, если модель получена из базы данных и поле не имеет значения NULL, вам нужно будет ввести модель представления для ее достижения.

1 голос
/ 21 августа 2009

Рискну сказать, что у вас две проблемы.

  1. Я предполагаю, что ReleaseDate - это DateTime. Если это так, то выполнение movieToValidate.ReleaseDate.ToString () вернет «01.01.1900 бла-бла». Вы не должны проверять длину, вы должны проверить это как movieToValidate.ReleaseDate == DateTime.MinValue возможно.
  2. Я получил «Требуется значение». ошибка раньше, когда я не думал, что должен получить ошибку. Это было как-то связано с моей моделью, в которой не было указано, что это необходимо. Как, например, отношение FK к другому объекту не было установлено или что-то еще. Если вы отладите приложение в своем контроллере, вы сможете увидеть ваши ModelErrors и детализировать эту конкретную ошибку и увидеть, откуда она возникает.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...