How to: Use Separate Server-Side Settings for Different Views in the ASP.NET MVC Dashboard
- 5 minutes to read
This example shows how to use separate DashboardConfigurator instances within an ASP.NET MVC Dashboard application to provide different server-side settings. In this example, the Sales and Marketing views use different dashboard storage and different data connections.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/aspnet-mvc-dashboard-how-to-use-separate-server-side-settings-for-different-views-t464543.
- HomeController.cs
- MarketingView.cshtml (C#)
- DashboardConfig.cs
- Index.cshtml (C#)
- SalesView.cshtml (C#)
- _Layout.cshtml (C#)
- Global.asax.cs
- HomeController.vb
- Index.cshtml (VB.NET)
- Global.asax.vb
- SalesView.cshtml (VB.NET)
- MarketingView.cshtml (VB.NET)
- _Layout.cshtml (VB.NET)
- DashboardConfig.vb
using System.Web.Mvc;
namespace MVCDashboard_ServerSideAPI.Controllers {
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
public ActionResult SalesDashboards() {
return View("SalesView");
}
public ActionResult MarketingDashboards() {
return View("MarketingView");
}
}
}
@{
ViewBag.Title = "Marketing";
}
<div id="#WebDashboard2" style="position: absolute; left: 0; right: 0; top:0; bottom:0;">
@Html.DevExpress().Dashboard(settings => {
settings.Name = "WebDashboard2";
settings.ControllerName = "MarketingDashboard";
settings.AllowCreateNewDashboard = false;
settings.Width = Unit.Percentage(100);
settings.Height = Unit.Percentage(100);
}).GetHtml()
</div>
using DevExpress.DashboardWeb.Mvc;
using System.Web.Routing;
public class DashboardConfig {
public static void RegisterService(RouteCollection routes) {
routes.MapDashboardRoute("MarketingDashboard", "MarketingDashboard", new[] { "MvcDashboard_ServerSideApi" } );
routes.MapDashboardRoute("SalesDashboard", "SalesDashboard", new[] { "MvcDashboard_ServerSideApi" });
}
}
@{
ViewBag.Title = "Welcome";
}
@Html.DevExpress().Menu(settings => {
settings.Name = "Menu";
settings.AllowSelectItem = false;
settings.Orientation = System.Web.UI.WebControls.Orientation.Horizontal;
settings.Items.Add(item => {
item.Text = "Sales Dashboards";
item.Image.Url = "~/Images/SalesImage.png";
item.NavigateUrl = DevExpressHelper.GetUrl(new { Controller = "Home", Action = "SalesDashboards" });
});
settings.Items.Add(item => {
item.Text = "Marketing Dashboards";
item.Image.Url = "~/Images/MarketingImage.png";
item.NavigateUrl = DevExpressHelper.GetUrl(new { Controller = "Home", Action = "MarketingDashboards" });
});
}).GetHtml()
@{
ViewBag.Title = "Sales";
}
<div id="#WebDashboard1" style="position: absolute; left: 0; right: 0; top:0; bottom:0;">
@Html.DevExpress().Dashboard(settings => {
settings.Name = "WebDashboard1";
settings.ControllerName = "SalesDashboard";
settings.AllowCreateNewDashboard = false;
settings.Width = Unit.Percentage(100);
settings.Height = Unit.Percentage(100);
}).GetHtml()
</div>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Html.DevExpress().GetStyleSheets(
new StyleSheet { ExtensionSuite = ExtensionSuite.Editors },
new StyleSheet { ExtensionSuite = ExtensionSuite.Dashboard }
)
@Html.DevExpress().GetScripts(
new Script { ExtensionSuite = ExtensionSuite.Editors },
new Script { ExtensionSuite = ExtensionSuite.Dashboard }
)
</head>
<body>
<div>
@RenderBody()
</div>
</body>
</html>
using System;
using System.Web.Hosting;
using System.Web.Mvc;
using System.Web.Routing;
using DevExpress.DashboardWeb;
using DevExpress.DashboardWeb.Mvc;
using DevExpress.DataAccess.ConnectionParameters;
using DevExpress.Web;
namespace MvcDashboard_ServerSideApi {
public class MvcApplication : System.Web.HttpApplication {
protected void Application_Start() {
DashboardConfig.RegisterService(RouteTable.Routes);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ASPxWebControl.CallbackError += Application_Error;
ControllerBuilder.Current.SetControllerFactory(typeof(CustomControllerFactory));
}
protected void Application_Error(object sender, EventArgs e) {
Exception exception = System.Web.HttpContext.Current.Server.GetLastError();
}
}
public class CustomControllerFactory : DefaultControllerFactory {
public override IController CreateController(RequestContext requestContext, string controllerName) {
if (controllerName == "SalesDashboard") {
DashboardConfigurator salesConfigurator = new DashboardConfigurator();
salesConfigurator.SetDashboardStorage(new DashboardFileStorage(@"~/App_Data/Sales"));
salesConfigurator.ConfigureDataConnection += (s, e) => {
string databasePath = HostingEnvironment.MapPath("~/App_Data/nwind.mdb");
if (e.ConnectionName == "Northwind connection")
e.ConnectionParameters = new Access97ConnectionParameters(databasePath, "", "");
};
return new DashboardController(salesConfigurator);
}
else if (controllerName == "MarketingDashboard") {
DashboardConfigurator marketingConfigurator = new DashboardConfigurator();
marketingConfigurator.SetDashboardStorage(new DashboardFileStorage(@"~/App_Data/Marketing"));
marketingConfigurator.ConfigureDataConnection += (s, e) => {
string connectionString = @"provider=MSOLAP;
data source=https://demos.devexpress.com/Services/OLAP/msmdpump.dll;
initial catalog=Adventure Works DW Standard Edition;
cube name=Adventure Works;";
if (e.ConnectionName == "Adventure Works connection")
e.ConnectionParameters = new OlapConnectionParameters(connectionString);
};
return new DashboardController(marketingConfigurator);
}
else {
return base.CreateController(requestContext, controllerName);
}
}
public override void ReleaseController(IController controller) {
IDisposable dispose = controller as IDisposable;
if (dispose != null) {
dispose.Dispose();
}
}
}
}
Imports System.Web.Mvc
Namespace MVCDashboard_ServerSideAPI.Controllers
Public Class HomeController
Inherits Controller
Public Function Index() As ActionResult
Return View()
End Function
Public Function SalesDashboards() As ActionResult
Return View("SalesView")
End Function
Public Function MarketingDashboards() As ActionResult
Return View("MarketingView")
End Function
End Class
End Namespace
@{
ViewBag.Title = "Welcome";
}
@Html.DevExpress().Menu(settings => {
settings.Name = "Menu";
settings.AllowSelectItem = false;
settings.Orientation = System.Web.UI.WebControls.Orientation.Horizontal;
settings.Items.Add(item => {
item.Text = "Sales Dashboards";
item.Image.Url = "~/Images/SalesImage.png";
item.NavigateUrl = DevExpressHelper.GetUrl(new { Controller = "Home", Action = "SalesDashboards" });
});
settings.Items.Add(item => {
item.Text = "Marketing Dashboards";
item.Image.Url = "~/Images/MarketingImage.png";
item.NavigateUrl = DevExpressHelper.GetUrl(new { Controller = "Home", Action = "MarketingDashboards" });
});
}).GetHtml()
Imports System
Imports System.Web.Hosting
Imports System.Web.Mvc
Imports System.Web.Routing
Imports DevExpress.DashboardWeb
Imports DevExpress.DashboardWeb.Mvc
Imports DevExpress.DataAccess.ConnectionParameters
Imports DevExpress.Web
Namespace MVCDashboard_ServerSideAPI
Public Class MvcApplication
Inherits System.Web.HttpApplication
Protected Sub Application_Start()
DashboardConfig.RegisterService(RouteTable.Routes)
RouteConfig.RegisterRoutes(RouteTable.Routes)
AddHandler ASPxWebControl.CallbackError, AddressOf Application_Error
ControllerBuilder.Current.SetControllerFactory(GetType(CustomControllerFactory))
End Sub
Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim exception As Exception = System.Web.HttpContext.Current.Server.GetLastError()
End Sub
End Class
Public Class CustomControllerFactory
Inherits DefaultControllerFactory
Public Overrides Function CreateController(ByVal requestContext As RequestContext,
ByVal controllerName As String) As IController
If controllerName = "SalesDashboard" Then
Dim salesConfigurator As New DashboardConfigurator()
salesConfigurator.SetDashboardStorage(New DashboardFileStorage("~/App_Data/Sales"))
AddHandler salesConfigurator.ConfigureDataConnection, Sub(s, e)
Dim databasePath As String = HostingEnvironment.MapPath("~/App_Data/nwind.mdb")
If e.ConnectionName = "Northwind connection" Then
e.ConnectionParameters = New Access97ConnectionParameters(databasePath, "", "")
End If
End Sub
Return New DashboardController(salesConfigurator)
ElseIf controllerName = "MarketingDashboard" Then
Dim marketingConfigurator As New DashboardConfigurator()
marketingConfigurator.SetDashboardStorage(New DashboardFileStorage("~/App_Data/Marketing"))
AddHandler marketingConfigurator.ConfigureDataConnection, Sub(s, e)
Dim connectionString As String = "provider=MSOLAP;" _
& ControlChars.CrLf &
"data source=http://demos.devexpress.com/Services/OLAP/msmdpump.dll;" _
& ControlChars.CrLf &
"initial catalog=Adventure Works DW Standard Edition;" _
& ControlChars.CrLf &
"cube name=Adventure Works;"
If e.ConnectionName = "Adventure Works connection" Then
e.ConnectionParameters = New OlapConnectionParameters(connectionString)
End If
End Sub
Return New DashboardController(marketingConfigurator)
Else
Return MyBase.CreateController(requestContext, controllerName)
End If
End Function
Public Overrides Sub ReleaseController(ByVal controller As IController)
Dim dispose_Renamed As IDisposable = TryCast(controller, IDisposable)
If dispose_Renamed IsNot Nothing Then
dispose_Renamed.Dispose()
End If
End Sub
End Class
End Namespace
@{
ViewBag.Title = "Sales";
}
<div id="#WebDashboard1" style="position: absolute; left: 0; right: 0; top:0; bottom:0;">
@Html.DevExpress().Dashboard(settings => {
settings.Name = "WebDashboard1";
settings.ControllerName = "SalesDashboard";
settings.AllowCreateNewDashboard = false;
settings.Width = Unit.Percentage(100);
settings.Height = Unit.Percentage(100);
}).GetHtml()
</div>
@{
ViewBag.Title = "Marketing";
}
<div id="#WebDashboard2" style="position: absolute; left: 0; right: 0; top:0; bottom:0;">
@Html.DevExpress().Dashboard(settings => {
settings.Name = "WebDashboard2";
settings.ControllerName = "MarketingDashboard";
settings.AllowCreateNewDashboard = false;
settings.Width = Unit.Percentage(100);
settings.Height = Unit.Percentage(100);
}).GetHtml()
</div>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Html.DevExpress().GetStyleSheets(
new StyleSheet { ExtensionSuite = ExtensionSuite.Editors },
new StyleSheet { ExtensionSuite = ExtensionSuite.Dashboard }
)
@Html.DevExpress().GetScripts(
new Script { ExtensionSuite = ExtensionSuite.Editors },
new Script { ExtensionSuite = ExtensionSuite.Dashboard }
)
</head>
<body>
<div>
@RenderBody()
</div>
</body>
</html>
Imports System.Web.Routing
Imports DevExpress.DashboardWeb.Mvc
Public Class DashboardConfig
Public Shared Sub RegisterService(ByVal routes As RouteCollection)
routes.MapDashboardRoute("MarketingDashboard", "MarketingDashboard", {"MVCDashboard_ServerSideAPI"})
routes.MapDashboardRoute("SalesDashboard", "SalesDashboard", {"MVCDashboard_ServerSideAPI"})
End Sub
End Class