前面分析太细了。。回到WidgetController的WidgetsByZone方法,大体意思是:
获得并缓存名称为string widgetZone的List<RenderWidgetModel>()。
其中RenderWidgetModel记录的路由信息通过插件的GetDisplayWidgetRoute方法获得 如下:
/// <summary>
/// Gets a route for displaying widget
/// </summary>
/// <param name="widgetZone">Widget zone where it's displayed</param>
/// <param name="actionName">Action name</param>
/// <param name="controllerName">Controller name</param>
/// <param name="routeValues">Route values</param>
public void GetDisplayWidgetRoute(string widgetZone, out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "PublicInfo";
controllerName = "WidgetsNivoSlider";
routeValues = new RouteValueDictionary
{
{"Namespaces", "Nop.Plugin.Widgets.NivoSlider.Controllers"},
{"area", null},
{"widgetZone", widgetZone}
};
}
最后返回的是一个部分视图 model是:
new List<RenderWidgetModel>();
查看部分视图:
@model List<RenderWidgetModel>
@using Nop.Web.Models.Cms;
@foreach (var widget in Model)
{
@Html.Action(widget.ActionName, widget.ControllerName, widget.RouteValues)
}
其实就是调用所有的Action.
继续_Root.Head.cshtml。
生成样式表文件,JS文件,和LINK等
然后Action了几个部件:
@Html.Action("RssHeaderLink", "News")
@Html.Action("RssHeaderLink", "Blog")
@*Favicon - upload favicon.ico file to the root directory*@
@Html.Action("Favicon", "Common")