2

私はMVCにかなり慣れています。私はinterfaceを私のモデルのプロパティとして使用しています。MVC3モデルの城でのバインド

私はData Annotation Attributesが無視されていることに気付きました。

インターフェイスのインスタンスを作成できません。フォームの送信中にエラーが発生しました。

私はすぐに私は私がRegistrationModelを以下しているModelBinder

CreateModelメソッド内で行われる必要があるものを考え出す苦労していたカスタムModelBinder

を使用する必要がありますことを考え出しました:ここでは

public class RegistrationModel 
{ 
    #region Properties (8)  

    public string Email { get; set; } 

    public string FirstName { get; set; } 

    public Gender Gender { get; set; } 

    public string LastName { get; set; } 

    public string Password { get; set; } 

    public string PasswordConfirmation { get; set; } 

    public IPlace Place { get; set; } 

    public string Username { get; set; } 

    #endregion Properties  
} 

IPlaceインタフェースと実装です:

public interface IPlace 
{ 
    #region Data Members (7)  

    string City { get; set; } 

    string Country { get; set; } 

    string ExternalId { get; set; } 

    Guid Id { get; set; } 

    string Name { get; set; } 

    string Neighborhood { get; set; } 

    string State { get; set; } 

    #endregion Data Members  
} 

public class Place : IPlace 
{ 
    #region Implementation of IPlace 

    public Guid Id { get; set; } 

    [StringLength(100, ErrorMessage = "City is too long.")] 
    public string City { get; set; } 

    [StringLength(100, ErrorMessage = "Country is too long.")] 
    public string Country { get; set; } 

    [StringLength(255, ErrorMessage = "External ID is too long.")] 
    public string ExternalId { get; set; } 

    [Required(ErrorMessage = "A name is required.")] 
    [StringLength(450, ErrorMessage = "Name is too long.")] 
    [DisplayName("Location")] 
    public string Name { get; set; } 

    [StringLength(100, ErrorMessage = "Neighborhood is too long.")] 
    public string Neighborhood { get; set; } 

    [StringLength(100, ErrorMessage = "State is too long.")] 
    public string State { get; set; } 

    #endregion 
} 
+1

ここでインターフェイスを使用するポイントは何ですか?それを取り除き、クラス "Place"を使用してください。 –

答えて

2

ビューモデルでは、インターフェイスと抽象タイプを使用しないでください。従って、このビューモデルを取っているコントローラーアクションが、IPlacePlace以外の実装を決して持つことができない場合は、単純にインターフェースを置き換えてください。

何らかの理由でそれが必要な場合は、既に知っているように、作成する実装を指定するカスタムモデルバインダーを作成する必要があります。ここにはan exampleがあります。

関連する問題