如何在MVC视图模型中添加小部件区域

时间:2018-12-31 16:24:58

标签: asp.net-mvc-4

我的网站在nopcommerce 4.1上运行。我想添加一个小部件,但只显示特定类别。我已经成功添加了一个小部件,但是如何添加另一个类似于下面的小部件:

@await Component.InvokeAsync("Widget", new { widgetZone = "example", additionalData = Model.Id })
@{
  var categoryIds = new List<int> { 109, 179 }; // list wanna show categories here, inside bracket with IDs
  if (categoryIds.Contains(Model.Id))
  {
    @await Component.InvokeAsync("Widget", new { widgetZone = "example", additionalData = Model.Id })
  }
}

假设如何添加另一个小部件

  @await Component.InvokeAsync("Widget", new { widgetZone = "example2", additionalData = Model.Id })

1 个答案:

答案 0 :(得分:0)

WidgetZones包含在NopCommerce中,是一种灵活的模块化方式,可将小部件/视图组件添加到您的页面。如果您查找NopCommerce源代码并找到Nop.Services.Cms.WidgetService类,则可以看到其工作原理。

简而言之,通过查找实现IWidgetPlugin的所有类,选择活动的窗口小部件并选择当前窗口小部件区域的窗口小部件来加载窗口小部件。窗口小部件可以使用GetWidgetZones()方法(它是IWidgetPlugin界面的成员)声明要渲染的窗口小部件区域。

因此,您完全有可能创建自己的窗口小部件区域,在剃须刀页面中使用一些条件逻辑来检查某些条件(即Model.Id是否与某个类别ID相匹配)并调用{{ 1}}方法,它们要在您的窗口小部件区域中呈现的InvokeAsync方法中定义的任何窗口小部件。

要以您的示例为基础,请在您的插件类(继承自GetWidgetZones()并实现BasePlugin的插件类中)

IWidgetPlugin

然后在“剃刀页面”中可以执行以下操作:

public IList<string> GetWidgetZones() {
    return new List<string>{
        "example2"
    }
}