ASP.NET MVC 5 ValidationMessageFor для внешнего ключа - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующие классы моделей, использующие VS 2017, EF и MVC 5.0

public class Album
{
    public virtual int AlbumId { get; set; }
    public virtual int GenreId { get; set; }
    public virtual int ArtistId { get; set; }
    public virtual string Title { get; set; }
    public virtual decimal Price { get; set; }
    public virtual string AlbumArtUrl { get; set; }
    public virtual Genre Genre { get; set; }
    public virtual Artist Artist { get; set; }  
}

public class Genre
{
    public virtual int GenreId { get; set; }

    [Display(Name="Genre Name")]
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual List<Album> Albums { get; set; }
}

В представлении у меня есть следующий код

@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.AlbumId)

<div class="form-group">
@Html.LabelFor(model => model.GenreId, "GenreId", new { @class = "control-label col-md-2" })
<div class="col-md-10">
 @Html.DropDownList("GenreId", String.Empty)
 @Html.ValidationMessageFor(model => model.GenreId)
 </div>
 </div>

Когда я запускаю код через VS, представление отображается с GenreId с выпадающим списком.Раскрывающийся список содержит пустое значение, в дополнение к значениям, представленным в таблице Жанр.

Когда я выбираю пустой из раскрывающегося списка и нажимаю «сохранить», отображается сообщение об ошибке

Поле GenreId обязательно для заполнения

Я не понимаю, откуда приходит сообщение.

В классе моделей Album для * нет аннотации Required1019 * собственность.Так как же ASP.NET MVC узнает, что нужно проверить GenreId?

Кроме того, почему пустое значение отображается в раскрывающемся списке?

1 Ответ

0 голосов
/ 11 декабря 2018
public class Album
{
 public virtual int AlbumId { get; set; }
 public virtual int GenreId { get; set; }
 public virtual int ArtistId { get; set; }
 public virtual string Title { get; set; }
 public virtual decimal Price { get; set; }
 public virtual string AlbumArtUrl { get; set; }
 public virtual Genre Genre { get; set; }
 public virtual Artist Artist { get; set; }  
}

В соответствии с вашим классом poco GenreId должен иметь значение типа int и не может быть нулевым.если вы напишите так, как показано ниже, вы создаете необязательное поле.

  public virtual Nullable<int> GenreId { get; set; }

Наконец, Razor и MVC могут генерировать сообщение об ошибке по умолчанию, если вы используете или др.

 @Html.ValidationMessageFor()

Примечание. Вы используете string.empty во втором параметре.Этот параметр может установить значение по умолчанию Dropdown.@ Html.DropDownList (, string.empty)

Hva хорошая кодировка;)

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