using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Demo.Models;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Demo.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<
HomeController
> _logger;
private static List<
SampleObject
> repo=new List<
SampleObject
>();
public HomeController(ILogger<
HomeController
> logger)
{
if (repo.Count == 0)
{
for (int i = 1; i <= 3; i++)
{
repo.Add(new SampleObject()
{
TimeSpan = DateTime.Now.TimeOfDay,
Id = i,
});
}
}
_logger = logger;
}
public IActionResult Index()
{
return View();
}
public IActionResult NormalEditor()
{
return View(new SampleObject(){Id=1,TimeSpan = DateTime.Now.TimeOfDay});
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel {RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier});
}
//Table data source
public virtual ActionResult Read([DataSourceRequest]DataSourceRequest request)
{
var jsonResult = Json(repo.ToDataSourceResult(request));
return jsonResult;
}
[HttpPost]
public virtual ActionResult Create([DataSourceRequest] DataSourceRequest request, SampleObject model)
{
try
{
if (ModelState.IsValid)
{
model.Id=new Random(DateTime.Now.TimeOfDay.Milliseconds).Next();
repo.Add(model);
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
}
return Json(new[] {model}.ToDataSourceResult(request, ModelState));
}
catch (Exception ex)
{
return Json(new[] {model}.ToDataSourceResult(request, ModelState));
}
}
[HttpPost]
public virtual ActionResult Update([DataSourceRequest]DataSourceRequest request, SampleObject model)
{
try
{
if (ModelState.IsValid)
{
repo.Remove(repo.First(i => i.Id == model.Id));
repo.Add(model);
}
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
}
catch(Exception ex)
{
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
}
}
[HttpPost]
public virtual ActionResult Destroy([DataSourceRequest]DataSourceRequest request, SampleObject model)
{
try
{
repo.Remove(repo.First(i => i.Id == model.Id));
return Json(new[] {model}.ToDataSourceResult(request, ModelState));
}
catch (Exception ex)
{
return Json(new[] {model}.ToDataSourceResult(request, ModelState));
}
}
//Table data source
}
public class SampleObject
{
public int Id { get; set; }
public TimeSpan TimeSpan { get; set; }
}
}
@using Microsoft.VisualBasic
@using Demo.Controllers
@{
ViewData["Title"] = "Home Page";
}
@(Html.Kendo().Grid<
SampleObject
>()
.Name("grid")
.Scrollable(s=>s.Height("calc( 100vh - 310px )"))
.Columns(columns =>
{
columns.Bound(m => m.Id);
columns.Bound(m => m.TimeSpan);
columns.Command(command => { command.Edit().Text(" ").UpdateText("Update"); command.Destroy().Text(" "); }).Width(155);
})
.ToolBar(toolbar =>
{
toolbar.Create();
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Filterable()
.Pageable()
.Sortable()
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(m => m.Id);
})
.Read(read => read.Action("Read", "Home" ))
.Create(create => create.Action("Create", "Home" ))
.Update(update => update.Action("Update", "Home" ))
.Destroy(destroy => destroy.Action("Destroy", "Home" ))
)
)