我的抽象超类TogglePanelViewModel有5个可重写属性4是虚拟的,因为它具有默认值集和一个抽象。我想用这个摘要部分视图中的视图模型,然后由继承TogglePanelViewModel的子类渲染。
我的问题是:-
- 这是正确的方法还是可以用另一种方式实现
- 由于我无法创建TogglePanelViewModel的实例,如何将视图模型(子类(传递到分部中
这是代码
抽象视图模型:
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>
例如:继承TogglePanelViewModel 的基类的1
这将给出错误
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{}实例
视图:
@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";
}
感谢
答案:将ToggleIdeationFilterVM实例作为模型传递到局部视图:-
@Html.Partial("~/Areas/Default/Views/Shared/TogglePanel.cshtml", new ToggleIdeationFilterVM())