ASP.NET MVC 2 - некоторые ошибки проверки не отображаются - PullRequest
0 голосов
/ 22 августа 2011

Я тестирую аннотации данных моей модели просмотра / редактирования, но некоторые ошибки не отображаются.Все они на уровне свойств, но не отображаются ни на уровне свойств, ни на уровне модели.Они просто не отображаются вообще.

Моя модель просмотра / редактирования:

public class AdminGameEditModel
{
    [Required]
    public int GameID { get; set; }

    [Required(ErrorMessage="A game must have a title")]
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string GameTitle { get; set; }

    [Required(ErrorMessage="A short URL must be supplied")]
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string Slug { get; set; }

    [Required(ErrorMessage="A box art image must be supplied")]
    public HttpPostedFileBase BoxArt { get; set; }

    [Required(ErrorMessage="A large image for the index page is required")]
    public HttpPostedFileBase IndexImage { get; set; }

    [Required(ErrorMessage="A game must have a review")]
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string ReviewText { get; set; }

    [Required(ErrorMessage="A game must have a score")]
    public int ReviewScore { get; set; }

    [Required(ErrorMessage="A game must have at least one Pro listed")]
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string[] Pros { get; set; }

    [Required(ErrorMessage="A game must have at least one Con listed")]
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string[] Cons { get; set; }

    [Required(ErrorMessage="A game must belong to a genre")]
    public int GenreID { get; set; }

    [Required(ErrorMessage="A game must be associated with at least one platform")]
    public int[] PlatformIDs { get; set; }
}

Свойства, проверка которых, кажется, не работает должным образом, - это "за", "против" и GenreID.,Вот как я пытаюсь вызвать их на мой взгляд:

<p>
    <%: Html.Label("Genre") %>
    <%: Html.ValidationMessageFor(model => Model.GameData.GenreID) %>
    <%: Html.DropDownListFor(m => Model.GameData.GenreID, new SelectList(Model.AllGenres, "GenreID", "Name", Model.GameData.GenreID)) %>
</p>

<p>
    <%: Html.LabelFor(model => Model.GameData.Pros) %><br />
    <%  for (var i = 0; i < 5; ++i)
        { %>
            <input type="text" name="GameData.Pros" value="<%: (Model.GameData.Pros[i] != null && String.IsNullOrEmpty(Model.GameData.Pros[i])) ? "" : Model.GameData.Pros[i] %>" /><br />
    <% } %>

    <%: Html.ValidationMessageFor(model => Model.GameData.Pros) %>
</p>

<p>
    <%: Html.LabelFor(model => Model.GameData.Cons) %><br />
    <%  for (var i = 0; i < 5; ++i)
        { %>
            <input type="text" name="GameData.Cons" value="<%: (Model.GameData.Cons[i] != null && String.IsNullOrEmpty(Model.GameData.Cons[i])) ? "" : Model.GameData.Cons[i] %>" /><br />
    <% } %>

    <%: Html.ValidationMessageFor(model => Model.GameData.Cons) %>
</p>

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

Есть идеи?

1 Ответ

1 голос
/ 23 августа 2011

Ну, для начала ... у ваших полей ввода нет идентификаторов. Проверка модели не работает с именами, только с идентификаторами. Но это только часть проблемы. Механизм связывания моделей вряд ли сможет связываться с массивами, поскольку массивы являются неизменяемыми, что затрудняет их повторное назначение. Вам придется переосмыслить эту часть вашего заявления.

Во-вторых, ваш DropDownList не имеет значения по умолчанию. В большинстве случаев он просто выбирает первый элемент, поэтому он не может быть недействительным.

Вы можете найти эту статью интересной.

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