前面分析太细了。。回到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")
原文:https://www.cnblogs.com/runit/p/4235486.html