こんにちは、モデルを可能な限りきれいに保つためにメタダを別のファイルに追加しようとしていますが、一部のプロパティが検証を表示していないように見えるため、何かが間違っているようです。これが私のモデルクラスです:
public partial class BookModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public string Description { get; set;}
public DateTime PublicationDate { get; set; }
public int CategoryId { get; set; }
public decimal Price { get; set; }
public string BookUrl { get; set; }
}
ここに私のメタデータ部分クラスがあります:
[MetadataType(typeof(BookModel))]
public partial class BookModelMetada
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Author { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime PublicationDate { get; set; }
[Required]
public int CategoryId { get; set; }
[Required]
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal Price { get; set; }
public string BookUrl { get; set; }
}
奇妙なフィールドは、PublicationDate と Price が検証エラーを表示するが、他のプロパティは表示しないことです。
私は何を間違っていますか?
編集:
コードを表示:
<p>
@Html.LabelFor(model => model.Book.Name, "Book Name")
@Html.TextBoxFor(model => model.Book.Name)
</p>
<p>
@Html.LabelFor(model => model.Book.Author)
@Html.TextBoxFor(model => model.Book.Author)
</p>
<p>
@Html.LabelFor(model => model.Book.PublicationDate ,"Publication Date")
@Html.TextBoxFor(model => model.Book.PublicationDate, new { @class="datepicker" })
</p>
<p>
@Html.LabelFor(model => model.Book.Price)
@Html.TextBoxFor(model => model.Book.Price)
</p>
<p>
@Html.LabelFor(model => model.Book.CategoryId, "Select category")
@Html.DropDownListFor(model => model.Book.CategoryId, new SelectList(Model.Categories, "Id", "Name"))
</p>
<p>
@Html.LabelFor(model => model.Book.Description)
@Html.TextAreaFor(model => model.Book.Description)
</p>
<p>
<input type="submit" value="Create" class="link"/>
@Html.ActionLink("Back to List", "Books", "ProductManager", null, new { @class = "link" })
</p>