The following code based on your index.cshtml works for me:
@model SandboxOneMvc.Models.DashboardModel
@using Ext.Net
@using Ext.Net.MVC
@using SandboxOneMvc.Models
@{
ViewBag.Title = "Dashboard";
Layout = "~/Views/Shared/_LayoutBlank.cshtml";
// DEBUG:
var m = Model;
}
@* TODO: RobM - 6/13*@
@functions
{
private IEnumerable<PortalColumn> InitPortal()
{
return InitPortalColumn();
}
private IEnumerable<PortalColumn> InitPortalColumn()
{
var layoutColumnCount = 2; // NOTE: hardcoded
List<PortalColumn> columns = new List<PortalColumn>();
for (int currentColumn = 1; currentColumn <= layoutColumnCount; currentColumn++)
{
PortalColumn portalColumn = new PortalColumn
{
ID = "portal-column" + currentColumn,
Cls = "x-column-padding",
MarginSpec = "0 10 0 10"
};
InitPortlet(currentColumn, portalColumn);
columns.Add(portalColumn);
}
return columns;
}
private string GetPortletHtml(string widgetName)
{
string html = "";
var sb = new System.Text.StringBuilder();
sb.Append("<div>");
sb.Append("<p>" + widgetName + "</p>");
sb.Append("<p>");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("<br />");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("Test Test Test Test Test Test Test Test Test Test Test Test");
sb.Append("</p>");
sb.Append("</div>");
html = sb.ToString();
return html;
}
private string GetWidgetPartialViewHtml(string widgetUrl, IWidget widgetViewModel)
{
return Html.Partial(widgetUrl, widgetViewModel).ToHtmlString();
}
private void InitPortlet(int currentColumn, PortalColumn portalColumn)
{
var layoutColumnCount = 1; // NOTE: hardcoded
var widgets = Model.Widgets;
foreach (var widget in widgets.Where(w => w.WidgetColumnPosition == currentColumn))
{
var widgetViewModel = CastWidgetModel(widget);
var portlet = new Ext.Net.Portlet.Builder();
portlet = Html.X().Portlet()
.ID("portlet-" + widget)
// Load Partial
.ContentFromPartial(widget.WidgetUrl, widgetViewModel)
.Html(GetPortletHtml(widget.WidgetName))
//.Html(GetWidgetPartialViewHtml(widget.WidgetUrl, widgetViewModel))
// Ext.Net - Complex
.Title(widget.WidgetName)
.Closable(false)
//.Layout(LayoutType.Fit)
//.Anchor("100% 50%")
.MinHeight(250)
.TopBar(new Toolbar
{
Items = { new Button { Text = "Reload", Icon = Icon.ArrowRefresh, OnClientClick = "alert('toolbar')" } }
});
portalColumn.Items.Add(portlet);
}
}
private IWidget CastWidgetModel(IWidget widgetContent)
{
IWidget widgetModel;
switch (widgetContent.WidgetId)
{
case 100:
widgetModel = widgetContent as WidgetModelAlerts;
break;
case 200:
widgetModel = widgetContent as WidgetModelRefernecePricing;
break;
default:
widgetModel = widgetContent as WidgetModelError;
break;
}
return widgetModel;
}
}
@(Html.X().ResourceManager())
@(Html.X().Viewport().Layout("Fit")
.Items(
Html.X().Portal()
.ID("dashboardPortal")
.Layout(LayoutType.Fit)
.Items(InitPortal())
)
)