public async Task <IActionResult> Destroy([DataSourceRequest] DataSourceRequest request,
                                                  DashboardWidgetViewModel viewModel)
        {
            var model = db.Widgets.First(n => n.DashboardWidgetId == viewModel.DashboardWidgetId);

            if (ModelState.IsValid)
            {
                db.Widgets.Remove(model);
                await db.SaveChangesAsync();
            }

            return(Json(await new[] { viewModel }.ToDataSourceResultAsync(request, ModelState)));
        }
        public async Task <IActionResult> Create([DataSourceRequest] DataSourceRequest request,
                                                 DashboardWidgetViewModel viewModel)
        {
            var model = new TWidget();

            if (ModelState.IsValid)
            {
                await this.TryUpdateModelAsync <DashboardWidgetViewModel, TWidget>(model);

                db.Widgets.Add(model);
                await db.SaveChangesAsync();
            }

            return(Json(await new[] { model.ToViewModel <TWidget, DashboardWidgetViewModel>() }
                        .ToDataSourceResultAsync(request, ModelState)));
        }
        public async Task <IActionResult> Update([DataSourceRequest] DataSourceRequest request,
                                                 DashboardWidgetViewModel viewModel)
        {
            var model = db.Widgets.First(n => n.DashboardWidgetId == viewModel.DashboardWidgetId);

            if (ModelState.IsValid)
            {
                await this.TryUpdateModelAsync <DashboardWidgetViewModel, TWidget>(model, "",
                                                                                   m => { return(m.ElementType == null); });

                await db.SaveChangesAsync();
            }

            return(Json(await new[] { model.ToViewModel <TWidget, DashboardWidgetViewModel>() }
                        .ToDataSourceResultAsync(request, ModelState)));
        }