I have a base model class, NotificationBase, and two derived models, GeneralNotification and ReleaseNotification.
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; }
}
I'm trying to use a single edit view to edit both derived notification types.
This view has a model of type NotificationBase.
The problem is I can't get the added properties of the derived types to be displayed in the edit view. Sending a model of the base type means I lose along the way the extra properties of the derived types.
Is there a workaround, or I just have to make separate views for each derived model ?
In MVC we cannot pass multiple models from a controller to the single view.
Yes, It is possible to share a view across multiple controllers by putting a view into the shared folder. By doing like this, you can automatically make the view available across multiple controllers.
ASP.NET MVC view can't have more than one model so if we need to display properties from more than one model in the view, it is not possible.
You can add a couple of conditions to your view. Suppose your view is strongly typed with base class:
@model NotificationBase
You can check for each subclass and add corresponding fields (untested code below!):
@if (Model is GeneralNotification)
{
Html.TextBoxFor(m => ((GeneralNotification) m).Message);
}
The same goes for second subtype of course:
@if (Model is ReleaseNotification)
{
Html.TextBoxFor(m => ((ReleaseNotification) m).Version);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With