我有以下模型类,使用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
?
此外,为什么下拉列表中显示空白值?
答案 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)
编码不错;)