From b9e01665d848f218e17863bba859895db7a7ad9f Mon Sep 17 00:00:00 2001 From: alestoya Date: Mon, 30 Dec 2024 18:10:43 +0200 Subject: [PATCH] chore(demos): add remote binding listbox example --- .../ListBox/RemoteBindingController.cs | 27 +++++++++ .../Database/InMemoryDbContext.cs | 20 +++++++ .../Models/EmployeeViewModel.cs | 2 + .../Telerik.Examples.Mvc/Program.cs | 22 ++++++-- .../Seeders/DataSeeder.cs | 33 +++++++++++ .../Telerik.Examples.Mvc.csproj | 1 + .../Views/ListBox/RemoteBinding.cshtml | 55 +++++++++++++++++++ 7 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 Telerik.Examples.Mvc/Telerik.Examples.Mvc/Controllers/ListBox/RemoteBindingController.cs create mode 100644 Telerik.Examples.Mvc/Telerik.Examples.Mvc/Database/InMemoryDbContext.cs create mode 100644 Telerik.Examples.Mvc/Telerik.Examples.Mvc/Seeders/DataSeeder.cs create mode 100644 Telerik.Examples.Mvc/Telerik.Examples.Mvc/Views/ListBox/RemoteBinding.cshtml diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Controllers/ListBox/RemoteBindingController.cs b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Controllers/ListBox/RemoteBindingController.cs new file mode 100644 index 0000000..d7a2ae7 --- /dev/null +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Controllers/ListBox/RemoteBindingController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using System.Linq; +using Telerik.Examples.Mvc.Database; + +namespace Telerik.Examples.Mvc.Controllers.ListBox +{ + public class RemoteBindingController : Controller + { + private readonly InMemoryDbContext _dbContext; + + public RemoteBindingController(InMemoryDbContext dbContext) + { + _dbContext = dbContext; + } + + public IActionResult RemoteBinding() + { + return View(); + } + + public IActionResult GetEmployees() + { + var employees = _dbContext.Employees.ToList(); + return Json(employees); + } + } +} diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Database/InMemoryDbContext.cs b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Database/InMemoryDbContext.cs new file mode 100644 index 0000000..7108a7c --- /dev/null +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Database/InMemoryDbContext.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.EntityFrameworkCore; +using Telerik.Examples.Mvc.Models; + +namespace Telerik.Examples.Mvc.Database +{ + public class InMemoryDbContext: DbContext + { + public InMemoryDbContext(DbContextOptions options) + : base(options) + { } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + } + + public DbSet Employees { get; set; } + } +} diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Models/EmployeeViewModel.cs b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Models/EmployeeViewModel.cs index 5c3068d..b4c617e 100644 --- a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Models/EmployeeViewModel.cs +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Models/EmployeeViewModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; @@ -7,6 +8,7 @@ namespace Telerik.Examples.Mvc.Models { public class EmployeeViewModel { + [Key] public int Id { get; set; } public string Name { get; set; } diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Program.cs b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Program.cs index 9cf6107..bcd2b81 100644 --- a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Program.cs +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Program.cs @@ -15,6 +15,8 @@ using Microsoft.AspNetCore.OData; using Microsoft.OData.Edm; using Microsoft.OData.ModelBuilder; +using Telerik.Examples.Mvc.Database; +using Telerik.Examples.Mvc.Seeders; var builder = WebApplication.CreateBuilder(args); @@ -49,6 +51,7 @@ builder.Services.Configure(options => { + options.ViewLocationFormats.Add("/Views/ListBox/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add("/Views/Captcha/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add("/Views/Grid/{0}" + RazorViewEngine.ViewExtension); options.ViewLocationFormats.Add("/Views/ImageEditor/{0}" + RazorViewEngine.ViewExtension); @@ -64,6 +67,10 @@ builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); +builder.Services.AddDbContext(options => + options.UseInMemoryDatabase("TelerikCoreDb") +); + builder.Services.AddDefaultIdentity(options => { options.SignIn.RequireConfirmedAccount = false; @@ -84,7 +91,8 @@ builder.Services .AddDistributedMemoryCache() - .AddSession(opts => { + .AddSession(opts => + { opts.Cookie.IsEssential = true; }); @@ -124,9 +132,15 @@ endpoints.MapRazorPages(); }); -using var serviceScope = app.Services.CreateScope(); -var context = serviceScope.ServiceProvider.GetRequiredService(); -context.Database.Migrate(); + +using (var serviceScope = app.Services.CreateScope()) +{ + var context = serviceScope.ServiceProvider.GetRequiredService(); + context.Database.Migrate(); + + var inMemoryContext = serviceScope.ServiceProvider.GetRequiredService(); + DataSeeder.SeedListBoxItems(inMemoryContext); +} app.Run(); diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Seeders/DataSeeder.cs b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Seeders/DataSeeder.cs new file mode 100644 index 0000000..8ae1d03 --- /dev/null +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Seeders/DataSeeder.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.Linq; +using Telerik.Examples.Mvc.Database; +using Telerik.Examples.Mvc.Models; + +namespace Telerik.Examples.Mvc.Seeders +{ + public class DataSeeder + { + public static void SeedListBoxItems(InMemoryDbContext dbContext) + { + if (dbContext.Employees.Any()) + { + return; + } + + var employees = new List + { + new EmployeeViewModel(){ Id = 1, Name = "Steven White" }, + new EmployeeViewModel(){ Id = 2, Name = "Nancy King" }, + new EmployeeViewModel(){ Id = 3, Name = "Nancy Davolio" }, + new EmployeeViewModel(){ Id = 4, Name = "Michael Leverling" }, + new EmployeeViewModel(){ Id = 5, Name = "Andrew Callahan" }, + new EmployeeViewModel(){ Id = 6, Name = "Michael Suyama" }, + }; + + dbContext.Employees.AddRange(employees); + dbContext.SaveChanges(); + } + } +} diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Telerik.Examples.Mvc.csproj b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Telerik.Examples.Mvc.csproj index ce8f9a0..c3e3a2d 100644 --- a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Telerik.Examples.Mvc.csproj +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Telerik.Examples.Mvc.csproj @@ -12,6 +12,7 @@ + all diff --git a/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Views/ListBox/RemoteBinding.cshtml b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Views/ListBox/RemoteBinding.cshtml new file mode 100644 index 0000000..29f9d96 --- /dev/null +++ b/Telerik.Examples.Mvc/Telerik.Examples.Mvc/Views/ListBox/RemoteBinding.cshtml @@ -0,0 +1,55 @@ +
+

Remote Binding

+
+ @(Html.Kendo().ListBox() + .Name("optional") + .DataTextField("Name") + .DataValueField("Id") + .Toolbar(toolbar => + { + toolbar.Position(ListBoxToolbarPosition.Right); + toolbar.Tools(tools => tools + .MoveUp() + .MoveDown() + .TransferTo() + .TransferFrom() + .TransferAllTo() + .TransferAllFrom() + .Remove() + ); + }) + .ConnectWith("selected") + .DataSource(dataSource => dataSource + .Read("GetEmployees", "RemoteBinding") + ) + ) + + @(Html.Kendo().ListBox() + .Name("selected") + .DataTextField("Name") + .DataValueField("Id") + .BindTo(new List()) + .Selectable(ListBoxSelectable.Multiple) + ) +
+
+ +