From 785848eae709c9e96f3af3e510fe58b77edfab66 Mon Sep 17 00:00:00 2001 From: Dezimeity Date: Sun, 17 Mar 2019 20:36:34 +0300 Subject: [PATCH 1/3] age and interface --- CourseApp.Tests/UnitTest5.cs | 35 +++++++++++++++++++++++++++++++++++ CourseApp.Tests/UnitTest6.cs | 30 ++++++++++++++++++++++++++++++ CourseApp/Fox.cs | 20 +++++++++++++++++++- CourseApp/GetAge.cs | 28 ++++++++++++++++++++++++++++ CourseApp/IKus.cs | 11 +++++++++++ CourseApp/Program.cs | 16 ++++++++++++++++ TProgramming_42_2018.csproj | 15 +++++++++++++++ UnitTest1.cs | 14 ++++++++++++++ 8 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 CourseApp.Tests/UnitTest5.cs create mode 100644 CourseApp.Tests/UnitTest6.cs create mode 100644 CourseApp/GetAge.cs create mode 100644 CourseApp/IKus.cs create mode 100644 TProgramming_42_2018.csproj create mode 100644 UnitTest1.cs diff --git a/CourseApp.Tests/UnitTest5.cs b/CourseApp.Tests/UnitTest5.cs new file mode 100644 index 0000000..3e03298 --- /dev/null +++ b/CourseApp.Tests/UnitTest5.cs @@ -0,0 +1,35 @@ +using Xunit; +using System; +using CourseApp; + +namespace CourseApp.Tests +{ + public class UnitTest5 + { + [Fact] + public void UnitTest17() + { + GetAge newAge = new GetAge(); + DateTime dateBorn = new DateTime(1997, 02, 08); + DateTime dateToday = new DateTime(2019, 03, 18); + Assert.Equal("Возраст: 22, 1, 10", newAge.Get(dateBorn, dateToday)); + } + [Fact] + public void UnitTest18() + { + GetAge newAge = new GetAge(); + DateTime dateBorn = new DateTime(2019, 03, 18); + DateTime dateToday = new DateTime(2019, 03, 18); + Assert.Equal("Это сегодняшняя дата", newAge.Get(dateBorn, dateToday)); + } + [Fact] + public void UnitTest19() + { + GetAge newAge = new GetAge(); + DateTime dateBorn = new DateTime(2020, 02, 08); + DateTime dateToday = new DateTime(2019, 03, 18); + Assert.Equal("Дата ещё не наступила", newAge.Get(dateBorn, dateToday)); + } + } +} + diff --git a/CourseApp.Tests/UnitTest6.cs b/CourseApp.Tests/UnitTest6.cs new file mode 100644 index 0000000..66dfba6 --- /dev/null +++ b/CourseApp.Tests/UnitTest6.cs @@ -0,0 +1,30 @@ +using Xunit; +using System; +using CourseApp; + +namespace CourseApp.Tests +{ + public class UnitTest6 + { + public Fox one = new Fox(); + + [Fact] + public void UnitTest20() + { + Assert.Equal("Лиса сделала КУСЬ!", one.Kus()); + } + + [Fact] + public void UnitTest21() + { + Fox one = new Fox(); + Fox two = new Fox("Вторая", "Черная"); + Fox[] fox = new Fox[] { one, two }; + Array.Sort(fox); + Assert.Equal(one.Name, fox[1].Name); + Assert.Equal(one.Age, fox[1].Age); + Assert.Equal(two.Name, fox[0].Name); + Assert.Equal(two.Age, fox[0].Age); + } + } +} diff --git a/CourseApp/Fox.cs b/CourseApp/Fox.cs index e1b1166..e2d21b4 100644 --- a/CourseApp/Fox.cs +++ b/CourseApp/Fox.cs @@ -2,7 +2,7 @@ namespace CourseApp { - public class Fox : Animals + public class Fox : Animals, IKus, IComparable { public Fox() : base() @@ -22,6 +22,24 @@ public Fox(string name, string color, int age) Age = age; } // 3 конструктор + public string Kus() + { + return "Лиса сделала КУСЬ!"; + } + + public int CompareTo(object o) + { + Fox f = o as Fox; + if (f != null) + { + return this.Name.CompareTo(f.Name); + } + else + { + throw new Exception("Невозможно сравнить два объекта"); + } + } + public override void GetInfo() { Console.WriteLine($"Имя: {Name} Цвет: {Color} Возраст: {Age}"); diff --git a/CourseApp/GetAge.cs b/CourseApp/GetAge.cs new file mode 100644 index 0000000..060cd2e --- /dev/null +++ b/CourseApp/GetAge.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public class GetAge + { + public string Get(DateTime dateBorn, DateTime dateToday) + { + if (dateBorn == dateToday) + { + return "Это сегодняшняя дата"; + } + + if (dateToday < dateBorn) + { + return $"Дата ещё не наступила"; + } + + dateToday = dateToday.AddYears(-dateBorn.Year); + dateToday = dateToday.AddMonths(-dateBorn.Month); + dateToday = dateToday.AddDays(-dateBorn.Day); + + return $"Возраст: {dateToday.Year}, {dateToday.Month}, {dateToday.Day}"; + } + } +} diff --git a/CourseApp/IKus.cs b/CourseApp/IKus.cs new file mode 100644 index 0000000..6010cec --- /dev/null +++ b/CourseApp/IKus.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public interface IKus + { + string Kus(); + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 5b5d1e5..32e68cf 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -53,6 +53,22 @@ private static void Main() i.GetInfo(); } + Console.WriteLine(one.Kus()); + + Fox[] fox = new Fox[] { one, two }; + Array.Sort(fox); + + foreach (Fox f in fox) + { + Console.WriteLine("{0} - {1}", f.Name, f.Age); + } + + GetAge date = new GetAge(); + DateTime dateBorn = new DateTime(1997, 02, 08); + DateTime dateToday = new DateTime(2019, 03, 18); + Console.WriteLine(); + Console.WriteLine(date.Get(dateBorn, dateToday)); + Console.Read(); } } diff --git a/TProgramming_42_2018.csproj b/TProgramming_42_2018.csproj new file mode 100644 index 0000000..4ec64e7 --- /dev/null +++ b/TProgramming_42_2018.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp2.1 + + false + + + + + + + + + diff --git a/UnitTest1.cs b/UnitTest1.cs new file mode 100644 index 0000000..b94e6b4 --- /dev/null +++ b/UnitTest1.cs @@ -0,0 +1,14 @@ +using System; +using Xunit; + +namespace TProgramming_42_2018 +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} From 2f927c337a83ebc0bff7f004ffdc5e616da024c0 Mon Sep 17 00:00:00 2001 From: Dezimeity Date: Mon, 10 Jun 2019 10:53:27 +0300 Subject: [PATCH 2/3] FoxApp --- FoxApp/FoxApp.sln | 25 +++++ FoxApp/FoxApp/Controllers/HomeController.cs | 102 ++++++++++++++++++ FoxApp/FoxApp/FoxApp.csproj | 15 +++ FoxApp/FoxApp/Models/ErrorViewModel.cs | 11 ++ FoxApp/FoxApp/Models/Fox.cs | 16 +++ FoxApp/FoxApp/Models/FoxxContext.cs | 14 +++ FoxApp/FoxApp/Program.cs | 24 +++++ FoxApp/FoxApp/Startup.cs | 57 ++++++++++ FoxApp/FoxApp/Views/Home/Create.cshtml | 25 +++++ FoxApp/FoxApp/Views/Home/Delete.cshtml | 36 +++++++ FoxApp/FoxApp/Views/Home/Details.cshtml | 18 ++++ FoxApp/FoxApp/Views/Home/Edit.cshtml | 25 +++++ FoxApp/FoxApp/Views/Home/Index.cshtml | 21 ++++ FoxApp/FoxApp/Views/Shared/Error.cshtml | 25 +++++ .../Views/Shared/_CookieConsentPartial.cshtml | 25 +++++ FoxApp/FoxApp/Views/Shared/_Layout.cshtml | 77 +++++++++++++ .../Shared/_ValidationScriptsPartial.cshtml | 18 ++++ FoxApp/FoxApp/Views/_ViewImports.cshtml | 3 + FoxApp/FoxApp/Views/_ViewStart.cshtml | 3 + FoxApp/FoxApp/appsettings.Development.json | 9 ++ FoxApp/FoxApp/appsettings.json | 11 ++ FoxApp/FoxApp/wwwroot/css/site.css | 56 ++++++++++ FoxApp/FoxApp/wwwroot/favicon.ico | Bin 0 -> 32038 bytes FoxApp/FoxApp/wwwroot/js/site.js | 4 + 24 files changed, 620 insertions(+) create mode 100644 FoxApp/FoxApp.sln create mode 100644 FoxApp/FoxApp/Controllers/HomeController.cs create mode 100644 FoxApp/FoxApp/FoxApp.csproj create mode 100644 FoxApp/FoxApp/Models/ErrorViewModel.cs create mode 100644 FoxApp/FoxApp/Models/Fox.cs create mode 100644 FoxApp/FoxApp/Models/FoxxContext.cs create mode 100644 FoxApp/FoxApp/Program.cs create mode 100644 FoxApp/FoxApp/Startup.cs create mode 100644 FoxApp/FoxApp/Views/Home/Create.cshtml create mode 100644 FoxApp/FoxApp/Views/Home/Delete.cshtml create mode 100644 FoxApp/FoxApp/Views/Home/Details.cshtml create mode 100644 FoxApp/FoxApp/Views/Home/Edit.cshtml create mode 100644 FoxApp/FoxApp/Views/Home/Index.cshtml create mode 100644 FoxApp/FoxApp/Views/Shared/Error.cshtml create mode 100644 FoxApp/FoxApp/Views/Shared/_CookieConsentPartial.cshtml create mode 100644 FoxApp/FoxApp/Views/Shared/_Layout.cshtml create mode 100644 FoxApp/FoxApp/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 FoxApp/FoxApp/Views/_ViewImports.cshtml create mode 100644 FoxApp/FoxApp/Views/_ViewStart.cshtml create mode 100644 FoxApp/FoxApp/appsettings.Development.json create mode 100644 FoxApp/FoxApp/appsettings.json create mode 100644 FoxApp/FoxApp/wwwroot/css/site.css create mode 100644 FoxApp/FoxApp/wwwroot/favicon.ico create mode 100644 FoxApp/FoxApp/wwwroot/js/site.js diff --git a/FoxApp/FoxApp.sln b/FoxApp/FoxApp.sln new file mode 100644 index 0000000..3726155 --- /dev/null +++ b/FoxApp/FoxApp.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.438 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFDataApp", "EFDataApp\EFDataApp.csproj", "{76EB5314-1ECF-4F1C-9FED-99A678DFBD3F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {76EB5314-1ECF-4F1C-9FED-99A678DFBD3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76EB5314-1ECF-4F1C-9FED-99A678DFBD3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76EB5314-1ECF-4F1C-9FED-99A678DFBD3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76EB5314-1ECF-4F1C-9FED-99A678DFBD3F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {413E653D-4A18-4903-B166-B1302D73F53C} + EndGlobalSection +EndGlobal diff --git a/FoxApp/FoxApp/Controllers/HomeController.cs b/FoxApp/FoxApp/Controllers/HomeController.cs new file mode 100644 index 0000000..daa1542 --- /dev/null +++ b/FoxApp/FoxApp/Controllers/HomeController.cs @@ -0,0 +1,102 @@ +using System.Linq; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using FoxApp.Models; + +namespace FoxApp.Controllers +{ + public class HomeController : Controller + { + private FoxxContext db; + public HomeController(FoxxContext context) + { + db = context; + } + //Создание + public async Task Index() + { + return View(await db.Foxes.ToListAsync()); + } + public IActionResult Create() + { + return View(); + } + [HttpPost] + public async Task Create(Fox fox) + { + db.Foxes.Add(fox); + await db.SaveChangesAsync(); + return RedirectToAction("Index"); + } + //Детали + public async Task Details(int? id) + { + if (id != null) + { + Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); + if (fox != null) + return View(fox); + } + return NotFound(); + } + //Редактирование + public async Task Edit(int? id) + { + if (id != null) + { + Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); + if (fox != null) + return View(fox); + } + return NotFound(); + } + [HttpPost] + public async Task Edit(Fox fox) + { + db.Foxes.Update(fox); + await db.SaveChangesAsync(); + return RedirectToAction("Index"); + } + //Удаление + [HttpGet] + [ActionName("Delete")] + public async Task ConfirmDelete(int? id) + { + if (id != null) + { + Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); + if (fox != null) + return View(fox); + } + return NotFound(); + } + + //[HttpPost] + //public async Task Delete(int? id) + //{ + // if (id != null) + // { + // Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); + // if (fox != null) + // { + // db.Foxes.Remove(fox); + // await db.SaveChangesAsync(); + // return RedirectToAction("Index"); + // } + // } + // return NotFound(); + [HttpPost] + public async Task Delete(int? id) + { + if (id != null) + { + Fox fox = new Fox { Id = id.Value }; + db.Entry(fox).State = EntityState.Deleted; + await db.SaveChangesAsync(); + return RedirectToAction("Index"); + } + return NotFound(); + } + } + } diff --git a/FoxApp/FoxApp/FoxApp.csproj b/FoxApp/FoxApp/FoxApp.csproj new file mode 100644 index 0000000..e22727b --- /dev/null +++ b/FoxApp/FoxApp/FoxApp.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp2.2 + InProcess + + + + + + + + + + diff --git a/FoxApp/FoxApp/Models/ErrorViewModel.cs b/FoxApp/FoxApp/Models/ErrorViewModel.cs new file mode 100644 index 0000000..840651d --- /dev/null +++ b/FoxApp/FoxApp/Models/ErrorViewModel.cs @@ -0,0 +1,11 @@ +using System; + +namespace FoxApp.Models +{ + public class ErrorViewModel + { + public string RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/FoxApp/FoxApp/Models/Fox.cs b/FoxApp/FoxApp/Models/Fox.cs new file mode 100644 index 0000000..316fa95 --- /dev/null +++ b/FoxApp/FoxApp/Models/Fox.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace FoxApp.Models +{ + public class Fox + { + public int Id { get; set; } + public string Name { get; set; } // имя + public string Breed { get; set; } // вид + public string Description { get; set; } // описание + public int Age { get; set; } + } +} diff --git a/FoxApp/FoxApp/Models/FoxxContext.cs b/FoxApp/FoxApp/Models/FoxxContext.cs new file mode 100644 index 0000000..370dd8d --- /dev/null +++ b/FoxApp/FoxApp/Models/FoxxContext.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; + +namespace FoxApp.Models +{ + public class FoxxContext : DbContext + { + public DbSet Foxes { get; set; } + public FoxxContext(DbContextOptions options) + : base(options) + { + Database.EnsureCreated(); + } + } +} \ No newline at end of file diff --git a/FoxApp/FoxApp/Program.cs b/FoxApp/FoxApp/Program.cs new file mode 100644 index 0000000..5d21fe6 --- /dev/null +++ b/FoxApp/FoxApp/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace FoxApp +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/FoxApp/FoxApp/Startup.cs b/FoxApp/FoxApp/Startup.cs new file mode 100644 index 0000000..25beb09 --- /dev/null +++ b/FoxApp/FoxApp/Startup.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using FoxApp.Models; +using Microsoft.EntityFrameworkCore; + +namespace FoxApp +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // получаем строку подключения из файла конфигурации + string connection = Configuration.GetConnectionString("DefaultConnection"); + // добавляем контекст MobileContext в качестве сервиса в приложение + services.AddDbContext(options => + options.UseSqlServer(connection)); + services.AddMvc(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseCookiePolicy(); + + app.UseMvc(routes => + { + routes.MapRoute( + name: "default", + template: "{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/FoxApp/FoxApp/Views/Home/Create.cshtml b/FoxApp/FoxApp/Views/Home/Create.cshtml new file mode 100644 index 0000000..24ae4c1 --- /dev/null +++ b/FoxApp/FoxApp/Views/Home/Create.cshtml @@ -0,0 +1,25 @@ +@model FoxApp.Models.Fox +@{ + ViewBag.Title = "Добавление лисиц"; +} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
diff --git a/FoxApp/FoxApp/Views/Home/Delete.cshtml b/FoxApp/FoxApp/Views/Home/Delete.cshtml new file mode 100644 index 0000000..ba2bfe2 --- /dev/null +++ b/FoxApp/FoxApp/Views/Home/Delete.cshtml @@ -0,0 +1,36 @@ +@model FoxApp.Models.Fox +@{ + ViewBag.Title = "Удаление лисицы"; +} + +
+
+
Имя
+
+ @Html.DisplayFor(model => model.Name) +
+ +
Вид
+
+ @Html.DisplayFor(model => model.Breed) +
+ +
Описание
+
+ @Html.DisplayFor(model => model.Description) +
+ +
Возраст
+
+ @Html.DisplayFor(model => model.Age) +
+
+ +
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/FoxApp/FoxApp/Views/Home/Details.cshtml b/FoxApp/FoxApp/Views/Home/Details.cshtml new file mode 100644 index 0000000..eed6642 --- /dev/null +++ b/FoxApp/FoxApp/Views/Home/Details.cshtml @@ -0,0 +1,18 @@ +@model FoxApp.Models.Fox +@{ + ViewBag.Title = Model.Name; +} +

Лисица @Model.Name

+
+
+
Вид
+
@Model.Breed
+ +
Описание
+
@Model.Description
+ +
Возраст
+
@Model.Age
+ @*
Ссылка
*@ +
+
diff --git a/FoxApp/FoxApp/Views/Home/Edit.cshtml b/FoxApp/FoxApp/Views/Home/Edit.cshtml new file mode 100644 index 0000000..516b639 --- /dev/null +++ b/FoxApp/FoxApp/Views/Home/Edit.cshtml @@ -0,0 +1,25 @@ +@model FoxApp.Models.Fox +@{ + ViewBag.Title = "Редактирование лисицы"; +} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/FoxApp/FoxApp/Views/Home/Index.cshtml b/FoxApp/FoxApp/Views/Home/Index.cshtml new file mode 100644 index 0000000..63536f5 --- /dev/null +++ b/FoxApp/FoxApp/Views/Home/Index.cshtml @@ -0,0 +1,21 @@ +@model IEnumerable +@{ + ViewBag.Title = "Все лисицы"; +} +Добавить лисицу + + + @**@ + @foreach (var item in Model) + { + + + + + } +
ИмяВидОписание
@item.Name + Подробнее | + Изменить | + Удалить +
+ \ No newline at end of file diff --git a/FoxApp/FoxApp/Views/Shared/Error.cshtml b/FoxApp/FoxApp/Views/Shared/Error.cshtml new file mode 100644 index 0000000..a1e0478 --- /dev/null +++ b/FoxApp/FoxApp/Views/Shared/Error.cshtml @@ -0,0 +1,25 @@ +@model ErrorViewModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

diff --git a/FoxApp/FoxApp/Views/Shared/_CookieConsentPartial.cshtml b/FoxApp/FoxApp/Views/Shared/_CookieConsentPartial.cshtml new file mode 100644 index 0000000..a535ea4 --- /dev/null +++ b/FoxApp/FoxApp/Views/Shared/_CookieConsentPartial.cshtml @@ -0,0 +1,25 @@ +@using Microsoft.AspNetCore.Http.Features + +@{ + var consentFeature = Context.Features.Get(); + var showBanner = !consentFeature?.CanTrack ?? false; + var cookieString = consentFeature?.CreateConsentCookie(); +} + +@if (showBanner) +{ + + +} diff --git a/FoxApp/FoxApp/Views/Shared/_Layout.cshtml b/FoxApp/FoxApp/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..ee3bacb --- /dev/null +++ b/FoxApp/FoxApp/Views/Shared/_Layout.cshtml @@ -0,0 +1,77 @@ + + + + + + @ViewData["Title"] - FoxApp + + + + + + + + + + +
+ +
+
+ +
+ @RenderBody() +
+
+ +
+
+ © 2019 - Dezimeity @*- Privacy*@ +
+
+ + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/FoxApp/FoxApp/Views/Shared/_ValidationScriptsPartial.cshtml b/FoxApp/FoxApp/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..3c0e077 --- /dev/null +++ b/FoxApp/FoxApp/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/FoxApp/FoxApp/Views/_ViewImports.cshtml b/FoxApp/FoxApp/Views/_ViewImports.cshtml new file mode 100644 index 0000000..9cf5406 --- /dev/null +++ b/FoxApp/FoxApp/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using FoxApp +@using FoxApp.Models +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/FoxApp/FoxApp/Views/_ViewStart.cshtml b/FoxApp/FoxApp/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/FoxApp/FoxApp/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/FoxApp/FoxApp/appsettings.Development.json b/FoxApp/FoxApp/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/FoxApp/FoxApp/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/FoxApp/FoxApp/appsettings.json b/FoxApp/FoxApp/appsettings.json new file mode 100644 index 0000000..e91b335 --- /dev/null +++ b/FoxApp/FoxApp/appsettings.json @@ -0,0 +1,11 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=foxesdb5;Trusted_Connection=True;" + }, + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*" + } diff --git a/FoxApp/FoxApp/wwwroot/css/site.css b/FoxApp/FoxApp/wwwroot/css/site.css new file mode 100644 index 0000000..c486131 --- /dev/null +++ b/FoxApp/FoxApp/wwwroot/css/site.css @@ -0,0 +1,56 @@ +/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification +for details on configuring this project to bundle and minify static web assets. */ + +a.navbar-brand { + white-space: normal; + text-align: center; + word-break: break-all; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + font-size: 14px; +} +@media (min-width: 768px) { + html { + font-size: 16px; + } +} + +.border-top { + border-top: 1px solid #e5e5e5; +} +.border-bottom { + border-bottom: 1px solid #e5e5e5; +} + +.box-shadow { + box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); +} + +button.accept-policy { + font-size: 1rem; + line-height: inherit; +} + +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + white-space: nowrap; + /* Set the fixed height of the footer here */ + height: 60px; + line-height: 60px; /* Vertically center the text there */ +} diff --git a/FoxApp/FoxApp/wwwroot/favicon.ico b/FoxApp/FoxApp/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 zcmeHwX>eTEbtY7aYbrGrkNjgie?1jXjZ#zP%3n{}GObKv$BxI7Sl;Bwl5E+Qtj&t8 z*p|m4DO#HoJC-FyvNnp8NP<{Na0LMnTtO21(rBP}?EAiNjWgeO?z`{3ZoURUQlV2d zY1Pqv{m|X_oO91|?^z!6@@~od!@OH>&BN;>c@O+yUfy5w>LccTKJJ&`-k<%M^Zvi( z<$dKp=jCnNX5Qa+M_%6g|IEv~4R84q9|7E=|Ho(Wz3f-0wPjaRL;W*N^>q%^KGRr7 zxbjSORb_c&eO;oV_DZ7ua!sPH=0c+W;`vzJ#j~-x3uj};50#vqo*0w4!LUqs*UCh9 zvy2S%$#8$K4EOa&e@~aBS65_hc~Mpu=454VT2^KzWqEpBA=ME|O;1cn?8p<+{MKJf zbK#@1wzL44m$k(?85=Obido7=C|xWKe%66$z)NrzRwR>?hK?_bbwT z@Da?lBrBL}Zemo1@!9pYRau&!ld17h{f+UV0sY(R{ET$PBB|-=Nr@l-nY6w8HEAw* zRMIQU`24Jl_IFEPcS=_HdrOP5yf81z_?@M>83Vv65$QFr9nPg(wr`Ke8 zaY4ogdnMA*F7a4Q1_uXadTLUpCk;$ZPRRJ^sMOch;rlbvUGc1R9=u;dr9YANbQ<4Z z#P|Cp9BP$FXNPolgyr1XGt$^lFPF}rmBF5rj1Kh5%dforrP8W}_qJL$2qMBS-#%-|s#BPZBSETsn_EBYcr(W5dq( z@f%}C|iN7)YN`^)h7R?Cg}Do*w-!zwZb9=BMp%Wsh@nb22hA zA{`wa8Q;yz6S)zfo%sl08^GF`9csI9BlGnEy#0^Y3b);M+n<(}6jziM7nhe57a1rj zC@(2ISYBL^UtWChKzVWgf%4LW2Tqg_^7jMw`C$KvU+mcakFjV(BGAW9g%CzSyM;Df z143=mq0oxaK-H;o>F3~zJ<(3-j&?|QBn)WJfP#JR zRuA;`N?L83wQt78QIA$(Z)lGQY9r^SFal;LB^qi`8%8@y+mwcGsf~nv)bBy2S7z~9 z=;X@Gglk)^jpbNz?1;`!J3QUfAOp4U$Uxm5>92iT`mek#$>s`)M>;e4{#%HAAcb^8_Ax%ersk|}# z0bd;ZPu|2}18KtvmIo8`1@H~@2ejwo(5rFS`Z4&O{$$+ch2hC0=06Jh`@p+p8LZzY z&2M~8T6X^*X?yQ$3N5EzRv$(FtSxhW>>ABUyp!{484f8(%C1_y)3D%Qgfl_!sz`LTXOjR&L!zPA0qH_iNS!tY{!^2WfD%uT}P zI<~&?@&))5&hPPHVRl9);TPO>@UI2d!^ksb!$9T96V(F){puTsn(}qt_WXNw4VvHj zf;6A_XCvE`Z@}E-IOaG0rs>K>^=Sr&OgT_p;F@v0VCN0Y$r|Lw1?Wjt`AKK~RT*kJ z2>QPuVgLNcF+XKno;WBv$yj@d_WFJbl*#*V_Cwzo@%3n5%z4g21G*PVZ)wM5$A{klYozmGlB zT@u2+s}=f}25%IA!yNcXUr!!1)z(Nqbhojg0lv@7@0UlvUMT)*r;M$d0-t)Z?B1@qQk()o!4fqvfr_I0r7 zy1(NdkHEj#Yu{K>T#We#b#FD=c1XhS{hdTh9+8gy-vkcdkk*QS@y(xxEMb1w6z<^~ zYcETGfB#ibR#ql0EiD;PR$L&Vrh2uRv5t_$;NxC;>7_S5_OXxsi8udY3BUUdi55Sk zcyKM+PQ9YMA%D1kH1q48OFG(Gbl=FmV;yk8o>k%0$rJ8%-IYsHclnYuTskkaiCGkUlkMY~mx&K}XRlKIW;odWIeuKjtbc^8bBOTqK zjj(ot`_j?A6y_h%vxE9o*ntx#PGrnK7AljD_r58ylE*oy@{IY%+mA^!|2vW_`>`aC{#3`#3;D_$^S^cM zRcF+uTO2sICledvFgNMU@A%M)%8JbSLq{dD|2|2Sg8vvh_uV6*Q?F&rKaV{v_qz&y z`f;stIb?Cb2!Cg7CG91Bhu@D@RaIrq-+o+T2fwFu#|j>lD6ZS9-t^5cx>p|?flqUA z;Cgs#V)O#`Aw4$Kr)L5?|7f4izl!;n0jux}tEW$&&YBXz9o{+~HhoiYDJ`w5BVTl&ARya=M7zdy$FEe}iGBur8XE>rhLj&_yDk5D4n2GJZ07u7%zyAfNtOLn;)M?h*Py-Xtql5aJOtL4U8e|!t? z((sc6&OJXrPdVef^wZV&x=Z&~uA7^ix8rly^rEj?#d&~pQ{HN8Yq|fZ#*bXn-26P^ z5!)xRzYO9{u6vx5@q_{FE4#7BipS#{&J7*>y}lTyV94}dfE%Yk>@@pDe&F7J09(-0|wuI|$of-MRfK51#t@t2+U|*s=W; z!Y&t{dS%!4VEEi$efA!#<<7&04?kB}Soprd8*jYv;-Qj~h~4v>{XX~kjF+@Z7<t?^|i z#>_ag2i-CRAM8Ret^rZt*^K?`G|o>1o(mLkewxyA)38k93`<~4VFI?5VB!kBh%NNU zxb8K(^-MU1ImWQxG~nFB-Un;6n{lQz_FfsW9^H$Xcn{;+W^ZcG$0qLM#eNV=vGE@# z1~k&!h4@T|IiI<47@pS|i?Qcl=XZJL#$JKve;booMqDUYY{(xcdj6STDE=n?;fsS1 ze`h~Q{CT$K{+{t+#*I1=&&-UU8M&}AwAxD-rMa=e!{0gQXP@6azBq9(ji11uJF%@5 zCvV`#*?;ZguQ7o|nH%bm*s&jLej#@B35gy32ZAE0`Pz@#j6R&kN5w{O4~1rhDoU zEBdU)%Nl?8zi|DR((u|gg~r$aLYmGMyK%FO*qLvwxK5+cn*`;O`16c!&&XT{$j~5k zXb^fbh1GT-CI*Nj{-?r7HNg=e3E{6rxuluPXY z5Nm8ktc$o4-^SO0|Es_sp!A$8GVwOX+%)cH<;=u#R#nz;7QsHl;J@a{5NUAmAHq4D zIU5@jT!h?kUp|g~iN*!>jM6K!W5ar0v~fWrSHK@})@6Lh#h)C6F6@)&-+C3(zO! z8+kV|B7LctM3DpI*~EYo>vCj>_?x&H;>y0*vKwE0?vi$CLt zfSJB##P|M2dEUDBPKW=9cY-F;L;h3Fs4E2ERdN#NSL7ctAC z?-}_a{*L@GA7JHJudxtDVA{K5Yh*k(%#x4W7w+^ zcb-+ofbT5ieG+@QG2lx&7!MyE2JWDP@$k`M;0`*d+oQmJ2A^de!3c53HFcfW_Wtv< zKghQ;*FifmI}kE4dc@1y-u;@qs|V75Z^|Q0l0?teobTE8tGl@EB?k#q_wUjypJ*R zyEI=DJ^Z+d*&}B_xoWvs27LtH7972qqMxVFcX9}c&JbeNCXUZM0`nQIkf&C}&skSt z^9fw@b^Hb)!^hE2IJq~~GktG#ZWwWG<`@V&ckVR&r=JAO4YniJewVcG`HF;59}=bf zLyz0uxf6MhuSyH#-^!ZbHxYl^mmBVrx) zyrb8sQ*qBd_WXm9c~Of$&ZP$b^)<~0%nt#7y$1Jg$e}WCK>TeUB{P>|b1FAB?%K7>;XiOfd}JQ`|IP#Vf%kVy zXa4;XFZ+>n;F>uX&3|4zqWK2u3c<>q;tzjsb1;d{u;L$-hq3qe@82(ob<3qom#%`+ z;vzYAs7TIMl_O75BXu|r`Qhc4UT*vN$3Oo0kAC!{f2#HexDy|qUpgTF;k{o6|L>7l z=?`=*LXaow1o;oNNLXsGTrvC)$R&{m=94Tf+2iTT3Y_Or z-!;^0a{kyWtO4vksG_3cyc7HQ0~detf0+2+qxq(e1NS251N}w5iTSrM)`0p8rem!j zZ56hGD=pHI*B+dd)2B`%|9f0goozCSeXPw3 z+58k~sI02Yz#lOneJzYcG)EB0|F+ggC6D|B`6}d0khAK-gz7U3EGT|M_9$ZINqZjwf>P zJCZ=ogSoE`=yV5YXrcTQZx@Un(64*AlLiyxWnCJ9I<5Nc*eK6eV1Mk}ci0*NrJ=t| zCXuJG`#7GBbPceFtFEpl{(lTm`LX=B_!H+& z>$*Hf}}y zkt@nLXFG9%v**s{z&{H4e?aqp%&l#oU8lxUxk2o%K+?aAe6jLojA& z_|J0<-%u^<;NT*%4)n2-OdqfctSl6iCHE?W_Q2zpJken#_xUJlidzs249H=b#g z?}L4-Tnp6)t_5X?_$v)vz`s9@^BME2X@w<>sKZ3=B{%*B$T5Nj%6!-Hr;I!Scj`lH z&2dHFlOISwWJ&S2vf~@I4i~(0*T%OFiuX|eD*nd2utS4$1_JM?zmp>a#CsVy6Er^z zeNNZZDE?R3pM?>~e?H_N`C`hy%m4jb;6L#8=a7l>3eJS2LGgEUxsau-Yh9l~o7=Yh z2mYg3`m5*3Ik|lKQf~euzZlCWzaN&=vHuHtOwK!2@W6)hqq$Zm|7`Nmu%9^F6UH?+ z@2ii+=iJ;ZzhiUKu$QB()nKk3FooI>Jr_IjzY6=qxYy;&mvi7BlQ?t4kRjIhb|2q? zd^K~{-^cxjVSj?!Xs=Da5IHmFzRj!Kzh~b!?`P7c&T9s77VLYB?8_?F zauM^)p;qFG!9PHLfIsnt43UnmV?Wn?Ki7aXSosgq;f?MYUuSIYwOn(5vWhb{f%$pn z4ySN-z}_%7|B);A@PA5k*7kkdr4xZ@s{e9j+9w;*RFm;XPDQwx%~;8iBzSKTIGKO z{53ZZU*OLr@S5=k;?CM^i#zkxs3Sj%z0U`L%q`qM+tP zX$aL;*^g$7UyM2Go+_4A+f)IQcy^G$h2E zb?nT$XlgTEFJI8GN6NQf%-eVn9mPilRqUbT$pN-|;FEjq@Ao&TxpZg=mEgBHB zU@grU;&sfmqlO=6|G3sU;7t8rbK$?X0y_v9$^{X`m4jZ_BR|B|@?ZCLSPPEzz`w1n zP5nA;4(kQFKm%$enjkkBxM%Y}2si&d|62L)U(dCzCGn56HN+i#6|nV-TGIo0;W;`( zW-y=1KF4dp$$mC_|6}pbb>IHoKQeZajXQB>jVR?u`R>%l1o54?6NnS*arpVopdEF; zeC5J3*M0p`*8lif;!irrcjC?(uExejsi~>4wKYwstGY^N@KY}TujLx`S=Cu+T=!dx zKWlPm->I**E{A*q-Z^FFT5$G%7Ij0_*Mo4-y6~RmyTzUB&lfae(WZfO>um}mnsDXPEbau-!13!!xd!qh*{C)6&bz0j1I{>y$D-S)b*)JMCPk!=~KL&6Ngin0p6MCOxF2L_R9t8N!$2Wpced<#`y!F;w zKTi5V_kX&X09wAIJ#anfg9Dhn0s7(C6Nj3S-mVn(i|C6ZAVq0$hE)874co};g z^hR7pe4lU$P;*ggYc4o&UTQC%liCXooIfkI3TNaBV%t~FRr}yHu7kjQ2J*3;e%;iW zvDVCh8=G80KAeyhCuY2LjrC!Od1rvF7h}zszxGV)&!)6ChP5WAjv-zQAMNJIG!JHS zwl?pLxC-V5II#(hQ`l)ZAp&M0xd4%cxmco*MIk?{BD=BK`1vpc}D39|XlV z{c&0oGdDa~TL2FT4lh=~1NL5O-P~0?V2#ie`v^CnANfGUM!b4F=JkCwd7Q`c8Na2q zJGQQk^?6w}Vg9-{|2047((lAV84uN%sK!N2?V(!_1{{v6rdgZl56f0zDMQ+q)jKzzu^ztsVken;=DjAh6G`Cw`Q4G+BjS+n*=KI~^K{W=%t zbD-rN)O4|*Q~@<#@1Vx$E!0W9`B~IZeFn87sHMXD>$M%|Bh93rdGf1lKoX3K651t&nhsl= zXxG|%@8}Bbrlp_u#t*DZX<}_0Yb{A9*1Pd_)LtqNwy6xT4pZrOY{s?N4)pPwT(i#y zT%`lRi8U#Ken4fw>H+N`{f#FF?ZxFlLZg7z7#cr4X>id z{9kUD`d2=w_Zlb{^c`5IOxWCZ1k<0T1D1Z31IU0Q2edsZ1K0xv$pQVYq2KEp&#v#Z z?{m@Lin;*Str(C2sfF^L>{R3cjY`~#)m>Wm$Y|1fzeS0-$(Q^z@} zEO*vlb-^XK9>w&Ef^=Zzo-1AFSP#9zb~X5_+){$(eB4K z8gtW+nl{q+CTh+>v(gWrsP^DB*ge(~Q$AGxJ-eYc1isti%$%nM<_&Ev?%|??PK`$p z{f-PM{Ym8k<$$)(F9)tqzFJ?h&Dk@D?Dt{4CHKJWLs8$zy6+(R)pr@0ur)xY{=uXFFzH_> z-F^tN1y(2hG8V)GpDg%wW0Px_ep~nIjD~*HCSxDi0y`H!`V*~RHs^uQsb1*bK1qGpmd zB1m`Cjw0`nLBF2|umz+a#2X$c?Lj;M?Lj;MUp*d>7j~ayNAyj@SLpeH`)BgRH}byy zyQSat!;U{@O(<<2fp&oQkIy$z`_CQ-)O@RN;QD9T4y|wIJ^%U#(BF%=`i49}j!D-) zkOwPSJaG03SMkE~BzW}b_v>LA&y)EEYO6sbdnTX*$>UF|JhZ&^MSb4}Tgbne_4n+C zwI8U4i~PI>7a3{kVa8|))*%C0|K+bIbmV~a`|G#+`TU#g zXW;bWIcWsQi9c4X*RUDpIfyoPY)2bI-r9)xulm1CJDkQd6u+f)_N=w1ElgEBjprPF z3o?Ly0RVeY_{3~fPVckRMxe2lM8hj!B8F)JO z!`AP6>u>5Y&3o9t0QxBpNE=lJx#NyIbp1gD zzUYBIPYHIv9ngk-Zt~<)62^1Zs1LLYMh@_tP^I7EX-9)Ed0^@y{k65Gp0KRcTmMWw zU|+)qx{#q0SL+4q?Q`i0>COIIF8a0Cf&C`hbMj?LmG9K&iW-?PJt*u)38tTXAP>@R zZL6uH^!RYNq$p>PKz7f-zvg>OKXcZ8h!%Vo@{VUZp|+iUD_xb(N~G|6c#oQK^nHZU zKg#F6<)+`rf~k*Xjjye+syV{bwU2glMMMs-^ss4`bYaVroXzn`YQUd__UlZL_mLs z(vO}k!~(mi|L+(5&;>r<;|OHnbXBE78LruP;{yBxZ6y7K3)nMo-{6PCI7gQi6+rF_ zkPod!Z8n}q46ykrlQS|hVB(}(2Kf7BCZ>Vc;V>ccbk2~NGaf6wGQH@W9&?Zt3v(h*P4xDrN>ex7+jH*+Qg z%^jH$&+*!v{sQ!xkWN4+>|b}qGvEd6ANzgqoVy5Qfws}ef2QqF{iiR5{pT}PS&yjo z>lron#va-p=v;m>WB+XVz|o;UJFdjo5_!RRD|6W{4}A2a#bZv)gS_`b|KsSH)Sd_JIr%<%n06TX&t{&!H#{)?4W9hlJ`R1>FyugOh3=D_{einr zu(Wf`qTkvED+gEULO0I*Hs%f;&=`=X4;N8Ovf28x$A*11`dmfy2=$+PNqX>XcG`h% zJY&A6@&)*WT^rC(Caj}2+|X|6cICm5h0OK0cGB_!wEKFZJU)OQ+TZ1q2bTx9hxnq& z$9ee|f9|0M^)#E&Pr4)f?o&DMM4w>Ksb{hF(0|wh+5_{vPow{V%TFzU2za&gjttNi zIyR9qA56dX52Qbv2aY^g`U7R43-p`#sO1A=KS2aKgfR+Yu^bQ*i-qu z%0mP;Ap)B~zZgO9lG^`325gOf?iUHF{~7jyGC)3L(eL(SQ70VzR~wLN18tnx(Cz2~ zctBl1kI)wAe+cxWHw*NW-d;=pd+>+wd$a@GBju*wFvabSaPtHiT!o#QFC+wBVwYo3s=y;z1jM+M=Fj!FZM>UzpL-eZzOT( zhmZmEfWa=%KE#V3-ZK5#v!Hzd{zc^{ctF~- z>DT-U`}5!fk$aj24`#uGdB7r`>oX5tU|d*b|N3V1lXmv%MGrvE(dXG)^-J*LA>$LE z7kut4`zE)v{@Op|(|@i#c>tM!12FQh?}PfA0`Bp%=%*RiXVzLDXnXtE@4B)5uR}a> zbNU}q+712pIrM`k^odG8dKtG$zwHmQI^c}tfjx5?egx3!e%JRm_64e+>`Ra1IRfLb z1KQ`SxmH{cZfyVS5m(&`{V}Y4j6J{b17`h6KWqZ&hfc(oR zxM%w!$F(mKy05kY&lco3%zvLCxBW+t*rxO+i=qGMvobx0-<7`VUu)ka`){=ew+Ovt zg%52_{&UbkUA8aJPWsk)gYWV4`dnxI%s?7^fGpq{ZQuu=VH{-t7w~K%_E<8`zS;V- zKTho*>;UQQul^1GT^HCt@I-q?)&4!QDgBndn?3sNKYKCQFU4LGKJ$n@Je$&w9@E$X z^p@iJ(v&`1(tq~1zc>0Vow-KR&vm!GUzT?Eqgnc)leZ9p)-Z*C!zqb=-$XG0 z^!8RfuQs5s>Q~qcz92(a_Q+KH?C*vCTr~UdTiR`JGuNH8v(J|FTiSEcPrBpmHRtmd zI2Jng0J=bXK);YY^rM?jzn?~X-Pe`GbAy{D)Y6D&1GY-EBcy%Bq?bKh?A>DD9DD!p z?{q02wno2sraGUkZv5dx+J8)&K$)No43Zr(*S`FEdL!4C)}WE}vJd%{S6-3VUw>Wp z?Aasv`T0^%P$2vE?L+Qhj~qB~K%eW)xH(=b_jU}TLD&BP*Pc9hz@Z=e0nkpLkWl}> z_5J^i(9Z7$(XG9~I3sY)`OGZ#_L06+Dy4E>UstcP-rU@xJ$&rxvo!n1Ao`P~KLU-8 z{zDgN4-&A6N!kPSYbQ&7sLufi`YtE2uN$S?e&5n>Y4(q#|KP!cc1j)T^QrUXMPFaP z_SoYO8S8G}Z$?AL4`;pE?7J5K8yWqy23>cCT2{=-)+A$X^-I9=e!@J@A&-;Ufc)`H}c(VI&;0x zrrGv()5mjP%jXzS{^|29?bLNXS0bC%p!YXI!;O457rjCEEzMkGf~B3$T}dXBO23tP z+Ci>;5UoM?C@bU@f9G1^X3=ly&ZeFH<@|RnOG--A&)fd)AUgjw?%izq{p(KJ`EP0v z2mU)P!+3t@X14DA=E2RR-|p${GZ9ETX=d+kJRZL$nSa0daI@&oUUxnZg0xd_xu>Vz lzF#z5%kSKX?YLH3ll^(hI(_`L*t#Iva2Ede*Z;>H_ Date: Tue, 11 Jun 2019 07:10:33 +0300 Subject: [PATCH 3/3] FoxAppDesign --- FoxApp/FoxApp/Controllers/HomeController.cs | 30 ++---- FoxApp/FoxApp/Models/Fox.cs | 4 +- FoxApp/FoxApp/Models/FoxxContext.cs | 14 ++- FoxApp/FoxApp/Startup.cs | 6 +- FoxApp/FoxApp/Views/Home/Create.cshtml | 30 +++++- FoxApp/FoxApp/Views/Home/Delete.cshtml | 30 +++++- FoxApp/FoxApp/Views/Home/Details.cshtml | 34 +++++++ FoxApp/FoxApp/Views/Home/Edit.cshtml | 32 +++++- FoxApp/FoxApp/Views/Home/Index.cshtml | 34 ++++++- FoxApp/FoxApp/Views/Shared/_Layout.cshtml | 104 ++++++++++---------- FoxApp/FoxApp/appsettings.json | 2 +- 11 files changed, 233 insertions(+), 87 deletions(-) diff --git a/FoxApp/FoxApp/Controllers/HomeController.cs b/FoxApp/FoxApp/Controllers/HomeController.cs index daa1542..e62de17 100644 --- a/FoxApp/FoxApp/Controllers/HomeController.cs +++ b/FoxApp/FoxApp/Controllers/HomeController.cs @@ -8,7 +8,10 @@ namespace FoxApp.Controllers { public class HomeController : Controller { - private FoxxContext db; + private FoxxContext db; //Для взаимодействия с базой данных в контроллере определяется переменная контекст + //данных FoxxContext db. Причем поскольку в классе Startup в методе ConfigureServices + //контекст данных устанавливается как сервис, то в конструкторе контроллера мы можем + //получить переданный контекст данных. public HomeController(FoxxContext context) { db = context; @@ -16,7 +19,7 @@ public HomeController(FoxxContext context) //Создание public async Task Index() { - return View(await db.Foxes.ToListAsync()); + return View(await db.Foxes.ToListAsync()); // Получаем объекты из бд, создаём из них список и передаём в представление. } public IActionResult Create() { @@ -26,7 +29,7 @@ public IActionResult Create() public async Task Create(Fox fox) { db.Foxes.Add(fox); - await db.SaveChangesAsync(); + await db.SaveChangesAsync(); //Добавление данных в базу return RedirectToAction("Index"); } //Детали @@ -34,7 +37,9 @@ public async Task Details(int? id) { if (id != null) { - Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); + Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); //Метод получает id объекта, + //о котором надо вывести информацию. + //Затем найденный объект передается в представление. if (fox != null) return View(fox); } @@ -60,7 +65,7 @@ public async Task Edit(Fox fox) } //Удаление [HttpGet] - [ActionName("Delete")] + [ActionName("Delete")] //Данный атрибут указывает, что этот метод также относится к действию Delete public async Task ConfirmDelete(int? id) { if (id != null) @@ -71,21 +76,6 @@ public async Task ConfirmDelete(int? id) } return NotFound(); } - - //[HttpPost] - //public async Task Delete(int? id) - //{ - // if (id != null) - // { - // Fox fox = await db.Foxes.FirstOrDefaultAsync(p => p.Id == id); - // if (fox != null) - // { - // db.Foxes.Remove(fox); - // await db.SaveChangesAsync(); - // return RedirectToAction("Index"); - // } - // } - // return NotFound(); [HttpPost] public async Task Delete(int? id) { diff --git a/FoxApp/FoxApp/Models/Fox.cs b/FoxApp/FoxApp/Models/Fox.cs index 316fa95..e878eee 100644 --- a/FoxApp/FoxApp/Models/Fox.cs +++ b/FoxApp/FoxApp/Models/Fox.cs @@ -5,12 +5,12 @@ namespace FoxApp.Models { - public class Fox + public class Fox //Модель, представляющая объекты, которые будут храниться в базе данных. { public int Id { get; set; } public string Name { get; set; } // имя public string Breed { get; set; } // вид public string Description { get; set; } // описание - public int Age { get; set; } + public int Age { get; set; } //возраст } } diff --git a/FoxApp/FoxApp/Models/FoxxContext.cs b/FoxApp/FoxApp/Models/FoxxContext.cs index 370dd8d..4779d82 100644 --- a/FoxApp/FoxApp/Models/FoxxContext.cs +++ b/FoxApp/FoxApp/Models/FoxxContext.cs @@ -1,14 +1,20 @@ using Microsoft.EntityFrameworkCore; +//Чтобы взаимодействовать с базой данных через Entity Framework нам нужен контекст данных - класс, +//унаследованный от класса Microsoft.EntityFrameworkCore.DbContext. namespace FoxApp.Models { - public class FoxxContext : DbContext + public class FoxxContext : DbContext { - public DbSet Foxes { get; set; } + public DbSet Foxes { get; set; } //Свойство DbSet представляет собой коллекцию объектов, + //которая сопоставляется с определенной таблицей в базе данных. + //При этом по умолчанию название свойства должно соответствовать множественному числу + //названию модели в соответствии с правилами английского языка. public FoxxContext(DbContextOptions options) - : base(options) + : base(options) //Через параметр options в конструктор контекста данных будут передаваться настройки контекста. { - Database.EnsureCreated(); + Database.EnsureCreated(); //В конструкторе с помощью вызова Database.EnsureCreated() + //по определению моделей будет создаваться база данных } } } \ No newline at end of file diff --git a/FoxApp/FoxApp/Startup.cs b/FoxApp/FoxApp/Startup.cs index 25beb09..92db38f 100644 --- a/FoxApp/FoxApp/Startup.cs +++ b/FoxApp/FoxApp/Startup.cs @@ -18,11 +18,13 @@ public Startup(IConfiguration configuration) public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) + public void ConfigureServices(IServiceCollection services) //Добавление контекста данных в виде сервиса позволит + //затем получать его в конструкторе контроллера через + //механизм внедрения зависимостей. { // получаем строку подключения из файла конфигурации string connection = Configuration.GetConnectionString("DefaultConnection"); - // добавляем контекст MobileContext в качестве сервиса в приложение + // добавляем контекст FoxxContext в качестве сервиса в приложение services.AddDbContext(options => options.UseSqlServer(connection)); services.AddMvc(); diff --git a/FoxApp/FoxApp/Views/Home/Create.cshtml b/FoxApp/FoxApp/Views/Home/Create.cshtml index 24ae4c1..954f323 100644 --- a/FoxApp/FoxApp/Views/Home/Create.cshtml +++ b/FoxApp/FoxApp/Views/Home/Create.cshtml @@ -2,6 +2,34 @@ @{ ViewBag.Title = "Добавление лисиц"; } + + + + +
@@ -20,6 +48,6 @@
- +
diff --git a/FoxApp/FoxApp/Views/Home/Delete.cshtml b/FoxApp/FoxApp/Views/Home/Delete.cshtml index ba2bfe2..4573d15 100644 --- a/FoxApp/FoxApp/Views/Home/Delete.cshtml +++ b/FoxApp/FoxApp/Views/Home/Delete.cshtml @@ -3,6 +3,34 @@ ViewBag.Title = "Удаление лисицы"; } + + + + +
Имя
@@ -29,7 +57,7 @@
- +
diff --git a/FoxApp/FoxApp/Views/Home/Details.cshtml b/FoxApp/FoxApp/Views/Home/Details.cshtml index eed6642..e1e7ddc 100644 --- a/FoxApp/FoxApp/Views/Home/Details.cshtml +++ b/FoxApp/FoxApp/Views/Home/Details.cshtml @@ -2,13 +2,47 @@ @{ ViewBag.Title = Model.Name; } + + + + +

Лисица @Model.Name

Вид
+ @**@
@Model.Breed
Описание
+ @**@
@Model.Description
Возраст
diff --git a/FoxApp/FoxApp/Views/Home/Edit.cshtml b/FoxApp/FoxApp/Views/Home/Edit.cshtml index 516b639..95287b3 100644 --- a/FoxApp/FoxApp/Views/Home/Edit.cshtml +++ b/FoxApp/FoxApp/Views/Home/Edit.cshtml @@ -2,7 +2,37 @@ @{ ViewBag.Title = "Редактирование лисицы"; } + + + + +
+ @*Без этого значения Entity Framework не сможет*@ + @*обновить соответствующую модель в базе данных.*@
@@ -20,6 +50,6 @@
- +
\ No newline at end of file diff --git a/FoxApp/FoxApp/Views/Home/Index.cshtml b/FoxApp/FoxApp/Views/Home/Index.cshtml index 63536f5..a9a4bfc 100644 --- a/FoxApp/FoxApp/Views/Home/Index.cshtml +++ b/FoxApp/FoxApp/Views/Home/Index.cshtml @@ -2,15 +2,43 @@ @{ ViewBag.Title = "Все лисицы"; } -Добавить лисицу + +@*Добавить лисицу*@ + + + + @**@ @foreach (var item in Model) { - - +
ИмяВидОписание
@item.Name + @item.Name Подробнее | Изменить | Удалить diff --git a/FoxApp/FoxApp/Views/Shared/_Layout.cshtml b/FoxApp/FoxApp/Views/Shared/_Layout.cshtml index ee3bacb..dcee7f6 100644 --- a/FoxApp/FoxApp/Views/Shared/_Layout.cshtml +++ b/FoxApp/FoxApp/Views/Shared/_Layout.cshtml @@ -3,7 +3,7 @@ - @ViewData["Title"] - FoxApp + @ViewData["Title"] - FoxApp @@ -13,65 +13,65 @@ asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" crossorigin="anonymous" - integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"/> + integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" /> -
- -
-
- -
- @RenderBody() -
-
- -
+ +
- © 2019 - Dezimeity @*- Privacy*@ + +
+ @RenderBody() +
-
- - - - - - - - - +
+
+ © 2019 - Dezimeity @*- Privacy*@ +
+
+ + + + + + + + + + - @RenderSection("Scripts", required: false) + @RenderSection("Scripts", required: false) diff --git a/FoxApp/FoxApp/appsettings.json b/FoxApp/FoxApp/appsettings.json index e91b335..7cad0fa 100644 --- a/FoxApp/FoxApp/appsettings.json +++ b/FoxApp/FoxApp/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=foxesdb5;Trusted_Connection=True;" + "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=foxesdb5;Trusted_Connection=True;" // }, "Logging": { "LogLevel": {