Переход в модель к частичному виду с использованием абстрактного класса - PullRequest
0 голосов
/ 28 октября 2018

Мой абстрактный суперкласс 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";
}

Спасибо

1 Ответ

0 голосов
/ 28 октября 2018

Ответ: передать экземпляр ToggleIdeationFilterVM в качестве модели в частичное представление: -

@Html.Partial("~/Areas/Default/Views/Shared/TogglePanel.cshtml", new ToggleIdeationFilterVM())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...