2

저는 MVC가 처음입니다. 내 모델의 속성으로 interface을 사용하고 있습니다.MVC3 모델은 성을 사용하여 바인딩합니다.

Data Annotation Attributes이 무시되고있는 것으로 나타났습니다. 양식을 제출하는 중에 오류가 발생했습니다.

인터페이스의 인스턴스를 만들 수 없습니다.

은 곧 내가 정의 ModelBinder

나는 내가 RegistrationModel 다음 한 ModelBinder

CreateModel 방법 내부에서 수행 될 필요가 무엇인지 파악하는 힘든 시간을 보내고 있어요에게 사용해야 할 것입니다 있다고 생각 : 여기서

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이 있습니다.

관련 문제