これはMVC2とEntityFramework4の問題ですか、それとも仕様によるものですか?EFプロパティの検証は、日時のnull許容でない(必須の)フィールドで正常に機能し、数値フィールドと文字列フィールドのデータ型の検証は、ViewModelsを使用せずに機能しているようです。
slq 2008でbarNameと呼ばれる単一のnull許容でないvarchar(50)列を使用して、単純なFOOBARテーブルを使用して問題を再現しました。そのデータベースからEFモデルを生成し、FOOBARエンティティのコントローラーとCREATEビューをすばやく追加しました。プロパティbarNameの値を入力せずにCREATEアクションにPOSTしようとすると、VSはモデルのdesigner.csファイル内の例外にステップインします(上記のように)。例外を超えようとすると、検証メッセージがフォームに表示され、フィールドがピンク色で強調表示されます。
何かが正しい順序で発火していないようです。VSがHTTPPOSTCREATEメソッドにステップインする前に例外が発生するためです。
ASP.NetMvcMusicStoreサンプルのコードが役に立ちました。http://mvcmusicstore.codeplex.com/releases/view/44445#DownloadId=119336
ViewModelにバインドすると問題が解決するようです。
namespace MvcMusicStore.ViewModels
{
public class StoreManagerViewModel
{
public Album Album { get; set; }
public List<Artist> Artists { get; set; }
public List<Genre> Genres { get; set; }
}
}
........
namespace MvcMusicStore.Models
{
[MetadataType(typeof(AlbumMetaData))]
public partial class Album
{
// Validation rules for the Album class
[Bind(Exclude = "AlbumId")]
public class AlbumMetaData
{
[ScaffoldColumn(false)]
public object AlbumId { get; set; }
[DisplayName("Genre")]
public object GenreId { get; set; }
[DisplayName("Artist")]
public object ArtistId { get; set; }
[Required(ErrorMessage = "An Album Title is required")]
[StringLength(160)]
public object Title { get; set; }
[DisplayName("Album Art URL")]
[StringLength(1024)]
public object AlbumArtUrl { get; set; }
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 100.00, ErrorMessage="Price must be between 0.01 and 100.00")]
public object Price { get; set; }
}
}
}