Ho una classe modello base, NotificationBase e due modelli derivati, GeneralNotification e ReleaseNotification.Utilizzo di una vista singola per i modelli mvc derivati
public class NotificationBase
{
public int Id { get; set; }
[Required]
[StringLength(50, ErrorMessage="Title must not exceed 50 characters.")]
public string Title { get; set; }
[Required(ErrorMessage="Type is required.")]
public int TypeId { get; set; }
[Required(ErrorMessage="Importance is required.")]
public int ImportanceId { get; set; }
public DateTime Created {get; set; }
[Required(ErrorMessage="Start date is required.")]
public DateTime StartDate { get; set; }
[Required(ErrorMessage="End date is required")]
public DateTime EndDate { get; set; }
[AllowHtml]
[Required(ErrorMessage="Details are required")]
public string Details { get; set; }
}
public class GeneralNotification : NotificationBase
{
[Required(ErrorMessage="Message is required.")]
[StringLength(50, ErrorMessage = "Message must be maximum 50 chararacters long.")]
public string Message { get; set; }
}
public class ReleaseNotification : NotificationBase
{
[Required(ErrorMessage="Version is required.")]
public string Version { get; set; }
}
Sto tentando di utilizzare una singola vista di modifica per modificare entrambi i tipi di notifica derivati.
Questa vista ha un modello di tipo NotificationBase.
Il problema è che non riesco a ottenere le proprietà aggiunte dei tipi derivati da visualizzare nella vista di modifica. L'invio di un modello del tipo base significa che perdo lungo il percorso le proprietà extra dei tipi derivati.
C'è una soluzione alternativa, oppure devo solo creare viste separate per ogni modello derivato?
Grazie per la rapida risposta, Andrei. Questo è esattamente quello che sto facendo, problema è che questa è una vista di modifica e ho bisogno di visualizzare le proprietà delle entità selezionate. Per un modello GeneralNotification, ho bisogno di visualizzare il valore della proprietà Message. È questo il valore che non posso passare alla mia vista. –
@OctavianEpure, come stai passando il modello alla vista? Puoi condividere un esempio di codice di questo? In teoria, l'esecuzione di 'return View (generalNotificationInstance)' insieme ai frammenti nella risposta sopra dovrebbe darti un risultato atteso. – Andrei
questo è il modello che passo alla vista @model NotificationBase, e nel controller faccio questo NotificationBase model = null; switch (typeId) { case (int) NotificationType.General: model = Servizio.GetGeneralNotification (id); interruzione; case (int) NotificationType.Release: model = Service.GetReleaseNotification (id); interruzione; } vista di ritorno (modello); –