diff --git a/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml b/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml new file mode 100644 index 0000000..31d85aa --- /dev/null +++ b/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml @@ -0,0 +1,25 @@ +@page "{id}" +@using OdeToFoodRider.Pages.Restaurants + +@model EditModel + +

Edit @Model.Restaurant.Name

+ +
+ + + +
+ + + +
+ +
+ + + +
+ + +
diff --git a/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml.cs b/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml.cs new file mode 100644 index 0000000..363288d --- /dev/null +++ b/OdeToFoodRider/OdeToFoodRider/Pages/Restaurants/Edit.cshtml.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using OdeToFoodRider.Models; +using OdeToFoodRider.Services; + +namespace OdeToFoodRider.Pages.Restaurants +{ + public class EditModel : PageModel + { + private readonly IRestaurantData _restaurantData; + + [BindProperty] + public Restaurant Restaurant { get; set; } + + public EditModel(IRestaurantData restaurantData) + { + _restaurantData = restaurantData; + } + + public IActionResult OnGet(int id) + { + Restaurant = _restaurantData.Get(id); + if (Restaurant == null) + { + return RedirectToAction("Index", "Home"); + } + + return Page(); + } + + public IActionResult OnPost() + { + if (ModelState.IsValid) + { + _restaurantData.Update(Restaurant); + return RedirectToAction("Details", "Home", new {id = Restaurant.Id}); + } + + return Page(); + } + } +} \ No newline at end of file diff --git a/OdeToFoodRider/OdeToFoodRider/Services/IRestaurantData.cs b/OdeToFoodRider/OdeToFoodRider/Services/IRestaurantData.cs index 618078a..4a84ace 100644 --- a/OdeToFoodRider/OdeToFoodRider/Services/IRestaurantData.cs +++ b/OdeToFoodRider/OdeToFoodRider/Services/IRestaurantData.cs @@ -9,5 +9,6 @@ public interface IRestaurantData IEnumerable GetAll(); Restaurant Get(int id); Restaurant Add(Restaurant restaurant); + Restaurant Update(Restaurant restaurant); } } \ No newline at end of file diff --git a/OdeToFoodRider/OdeToFoodRider/Services/InMemoryRestaurantData.cs b/OdeToFoodRider/OdeToFoodRider/Services/InMemoryRestaurantData.cs index d5bd6e7..600b60a 100644 --- a/OdeToFoodRider/OdeToFoodRider/Services/InMemoryRestaurantData.cs +++ b/OdeToFoodRider/OdeToFoodRider/Services/InMemoryRestaurantData.cs @@ -40,5 +40,10 @@ public Restaurant Add(Restaurant restaurant) _restaurants.Add(restaurant); return restaurant; } + + public Restaurant Update(Restaurant restaurant) + { + throw new System.NotImplementedException(); + } } } \ No newline at end of file diff --git a/OdeToFoodRider/OdeToFoodRider/Services/SqlRestaurantData.cs b/OdeToFoodRider/OdeToFoodRider/Services/SqlRestaurantData.cs index e3d2ac6..2222753 100644 --- a/OdeToFoodRider/OdeToFoodRider/Services/SqlRestaurantData.cs +++ b/OdeToFoodRider/OdeToFoodRider/Services/SqlRestaurantData.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Microsoft.EntityFrameworkCore; using OdeToFoodRider.Data; using OdeToFoodRider.Models; @@ -21,6 +22,13 @@ public Restaurant Add(Restaurant restaurant) return restaurant; } + public Restaurant Update(Restaurant restaurant) + { + _context.Attach(restaurant).State = EntityState.Modified; + _context.SaveChanges(); + return restaurant; + } + public Restaurant Get(int id) { return _context.Restaurants.FirstOrDefault(r => r.Id == id); diff --git a/OdeToFoodRider/OdeToFoodRider/Views/Home/Index.cshtml b/OdeToFoodRider/OdeToFoodRider/Views/Home/Index.cshtml index 7fec1c0..188d11f 100644 --- a/OdeToFoodRider/OdeToFoodRider/Views/Home/Index.cshtml +++ b/OdeToFoodRider/OdeToFoodRider/Views/Home/Index.cshtml @@ -18,6 +18,7 @@ Details @Html.ActionLink("Go", "Details", new {id = restaurant.Id}) More + Edit } diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml new file mode 100644 index 0000000..7fcb56f --- /dev/null +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml @@ -0,0 +1,26 @@ +@page "{id}" +@using OdeToFoodVisualStudio.Pages.Restaurants + +@model EditModel + +

Edit @Model.Restaurant.Name

+ +
+ + + +
+ + + +
+ + @* VSRD: Visual Studio has "Wrap with div" action but it's not reformatting the resulting markup, and as Extend Selection doesn't work in Razor, I have to select manually, then invoke Ctrl+K,F to reformat selection *@ +
+ + + +
+ + +
diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml.cs b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml.cs new file mode 100644 index 0000000..68b934f --- /dev/null +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Pages/Restaurants/Edit.cshtml.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using OdeToFoodVisualStudio.Models; +using OdeToFoodVisualStudio.Services; + +namespace OdeToFoodVisualStudio.Pages.Restaurants +{ + public class EditModel : PageModel + { + private IRestaurantData _restaurantData; + + [BindProperty] + public Restaurant Restaurant { get; set; } + + public EditModel(IRestaurantData restaurantData) + { + _restaurantData = restaurantData; + } + + public IActionResult OnGet(int id) + { + Restaurant = _restaurantData.Get(id); + if (Restaurant == null) + { + return RedirectToAction("Index", "Home"); + } + return Page(); + } + + public IActionResult OnPost() + { + if(ModelState.IsValid) + { + _restaurantData.Update(Restaurant); + return RedirectToAction("Details", "Home", new { id = Restaurant.Id }); + } + + return Page(); + } + } +} \ No newline at end of file diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/IRestaurantData.cs b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/IRestaurantData.cs index 18ffb31..45c550c 100644 --- a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/IRestaurantData.cs +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/IRestaurantData.cs @@ -12,5 +12,6 @@ public interface IRestaurantData IEnumerable GetAll(); Restaurant Get(int id); Restaurant Add(Restaurant restaurant); + Restaurant Update(Restaurant restaurant); } } diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/InMemoryRestaurantData.cs b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/InMemoryRestaurantData.cs index 9a944c2..a58c57d 100644 --- a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/InMemoryRestaurantData.cs +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/InMemoryRestaurantData.cs @@ -40,5 +40,10 @@ public Restaurant Add(Restaurant restaurant) _restaurants.Add(restaurant); return restaurant; } + + public Restaurant Update(Restaurant restaurant) + { + throw new NotImplementedException(); + } } } diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/SqlRestaurantData.cs b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/SqlRestaurantData.cs index e4d9fa8..83d7fc9 100644 --- a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/SqlRestaurantData.cs +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Services/SqlRestaurantData.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; using OdeToFoodVisualStudio.Data; using OdeToFoodVisualStudio.Models; @@ -33,5 +34,13 @@ public IEnumerable GetAll() { return _context.Restaurants.OrderBy(r => r.Name); } + + public Restaurant Update(Restaurant restaurant) + { + _context.Attach(restaurant).State = EntityState.Modified; + // VSRD: Visual Studio provides a kind of smart completion for non-imported EntityState after equals, nice. Inserts an FQN though :( + _context.SaveChanges(); + return restaurant; + } } } diff --git a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Views/Home/Index.cshtml b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Views/Home/Index.cshtml index 82c421e..25cdfb8 100644 --- a/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Views/Home/Index.cshtml +++ b/OdeToFoodVisualStudio/OdeToFoodVisualStudio/Views/Home/Index.cshtml @@ -17,6 +17,7 @@ Details @Html.ActionLink("Go", "Details", new { id = restaurant.Id }) More + Edit }