Мой абстрактный суперкласс TogglePanelViewModel, который имеет 5 переопределяемых свойств, 4 является виртуальным, так как у него установлены значения по умолчанию и один абстрактный.Я хочу использовать эту абстрактную модель представления в частичном представлении, которое затем отображается подклассами, которые наследуют TogglePanelViewModel.
Мои вопросы: -
- Это правильный подход или можетбыть реализован по-другому?
- Поскольку я не могу создать экземпляр TogglePanelViewModel, как я могу передать viewmodel (подкласс) в частичное?
Вот код
Абстрактная модель представления:
public abstract class TogglePanelViewModel
{
public abstract string LSName { get; }
public virtual string LabelText { get; set; } = "Hide welcome text|Show welcome text";
public virtual string StyleClass { get; set; } = "";
public virtual string StylePullRight { get; set; } = "pull-right";
public virtual bool RenderLabelAfterToggle { get; set; } = false;
}
Совместное частичное представление с использованием модели абстрактного представления:
@model App.Website.Areas.Default.ViewModels.TogglePanelViewModel
<div class="@Model.StyleClass toggle-filter @Model.StylePullRight" id="ls" name="@Model.LSName">
@if (Model.RenderLabelAfterToggle == false)
{
<div class="toggle-label">
<span>@Model.LabelText</span>
</div>
}
<div class="common-slide-checkbox @Model.StylePullRight">
<input type="checkbox" value="1" id="toggle-filter-visible">
<label for="toggle-filter-visible" id="toggle-pos"></label>
<div id="toggle-bg"></div>
</div>
@if (Model.RenderLabelAfterToggle == true)
{
<div class="toggle-label">
<span>@Model.LabelText</span>
</div>
}
</div>
Ex: 1 базового класса, который наследует TogglePanelViewModel
, что приведет к ошибке
The model item passed into the dictionary is of type 'App.Website.Areas.Create.Models.IdeationViewModel', but this dictionary requires a model item of type 'App.Website.Areas.Default.ViewModels.TogglePanelViewModel'.
Также не может создать экземпляр нового TogglePanelViewModel {}
View:
@using App.Website.Areas.Default.ViewModels
@model App.Website.Areas.Create.Models.IdeationViewModel
<div>
@Html.Partial("~/Views/Shared/TogglePanel.cshtml", Model.ToggleIdeationFilter)
</div>
Модель просмотра:
public class IdeationViewModel
{
...
public ToggleIdeationFilterVM ToggleIdeationFilter { get; set; }
}
public class ToggleIdeationFilterVM : TogglePanelViewModel
{
public override string LSName => null;
public override string LabelText => "Hide filter|Show filter";
}
Спасибо