これが私が持っているものです:
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;
}
RenderPartialを実行して他のタイプ固有のフィールドを追加するときに、メインの編集フォームがIEventから継承するため、ASP.NETMVCでカスタムモデルバインダーに取り組んでいます。
モデルバインダーにたどり着くと、タイプのすべてのキー/値を確認できます。これは良いことです。今、私はこれをしたい:
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フィールドにアクセスできないということです。
私はこれを理解していますが、私が何をする必要があるのか理解できないようです。