ASP.NET MVC 5 ValidationMessageFor外键

时间:2018-12-10 21:32:33

标签: asp.net-mvc

我有以下模型类,使用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一起显示,并带有一个下拉列表框。除了表Genre中显示的值之外,该下拉列表还包含一个空白值。

当我从下拉列表中选择空白并单击“保存”时,将显示错误消息

  

GenreId字段为必填

我不明白消息的来源。

在模型类Album中,Required属性没有GenreId注释。那么ASP.NET MVC如何知道如何验证GenreId

此外,为什么下拉列表中显示空白值?

1 个答案:

答案 0 :(得分: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; }  
}

根据您的poco类GenreId必须为int值,不能为null。 如果您在下面这样写,则会生成非必填字段。

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

最后,如果使用或其他,Razor和MVC可以生成默认错误消息。

 @Html.ValidationMessageFor()

注意:您在第二个参数中使用string.empty。该参数可以设置Dropdown的默认值。      @ Html.DropDownList(,string.empty)

编码不错;)

相关问题