2010-02-22 3 views
1

나는 이것이 바보 같은 질문이라는 것을 알고 있습니다. 그 대답은 "물론입니다. 물론!" 하나. 내가 추가 할 RenderPartial을 수행하는 동안 내 주요 편집 형태로 ASP.NET MVC에서 사용자 정의 모델 바인더 일하고인터페이스 구현시 유형별 속성 수정

public interface IEvent { 
    int Id 
    string Title 

} 

public class MeetingEvent : IEvent { 
    int Id 
    string Title 

    //Meeting Properties 
    string Room; 
    User Organizer; 
} 

public class BirthdayEvent : IEvent { 
    int Id 
    string Title 

    //Bday Properties 
    int Candles; 
    bool Surprise; 

}

는 IEvent에서 상속 : 여기

내가 가진 무엇 다른 유형별 필드

모델 바인더에 도달하면 형식에 대한 모든 키/값을 볼 수 있습니다.

IEvent _event; 

switch (eventType) { // EventType is an enum 
    case EventType.Birthday: 
    _event = new BirthdayEvent(); 

    _event.Candles= GetValue<int>(bindingContext, "Candles"); 
    _event.Surprise= GetValue<bool>(bindingContext, "Surprise"); 
    break; 

    case EventType.Meeting: 
    _event = new MeetingEvent(); 

    // Meeting-specific fields are set here... 
    break; 

    default: 
    throw new InvalidOperationException("Invalid Event Type"); 
} 

은 본질적으로, 내가 IEvent 변수를 원하고 나는 IEvent를 구현하는 특정 이벤트 유형을 생성하고 유형 특정 필드를 설정하려면 : 지금, 나는이 작업을 수행 할 수 있습니다. Visual Studio에서 BirthdayEvent 필드에 액세스 할 수 없다고 알려줍니다.

나는 이것을 이해하고 있지만, 나는 내가해야 할 일을 알아낼 수 없다. 따라서,이 질문 :).

미리 감사드립니다.

답변

3

BirthdayEventMeetingEvent 인스턴스를 처음 만들 때 해당 유형의 변수에 넣으십시오. 그런 식으로 그 구성원을 지정할 수 있습니다. 그런 다음 변수 _event에 할당하십시오. 이처럼 이러한 라인을 따라

switch (eventType) { // EventType is an enum 
    case EventType.Birthday: 
    { 
    var be = new BirthdayEvent(); 

    be.Candles= GetValue<int>(bindingContext, "Candles"); 
    be.Surprise= GetValue<bool>(bindingContext, "Surprise"); 
    _event = be; 
    break; 
    } 
    case EventType.Meeting: 
    { 
    var me = new MeetingEvent(); 

    // Meeting-specific fields are set here... 
    _event = me; 
    break; 
    { 
    default: 
    throw new InvalidOperationException("Invalid Event Type"); 
} 
+0

VAR! 굉장, Keltex, 고마워 :) – Dan

2

뭔가 :

IEvent _event; 

switch (eventType) { // EventType is an enum 
    case EventType.Birthday: 
    var birthdayEvent = new BirthdayEvent(); 

    birthdayEvent.Candles= GetValue<int>(bindingContext, "Candles"); 
    birthdayEvent.Surprise= GetValue<bool>(bindingContext, "Surprise"); 
    _event = birthdayEvent; 
    break; 
    /* etc */ 

    default: 
    throw new InvalidOperationException("Invalid Event Type"); 
}