homework/Controllers/HomeController.cs
2026-09-14 01:49:15 +05:00

99 lines
5.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// подключаем Activity — он нужен для Diagnosis-страницы (чтобы узнать ID запроса)
using System.Diagnostics;
// подключаем ASP.NET MVC — здесь Controller, IActionResult и другие классы
using Microsoft.AspNetCore.Mvc;
// подключаем наши модели — ErrorViewModel и ContactViewModel
using TechnoWorld.Models;
// пространство имён нашего проекта — все контроллеры лежат в папке Controllers
namespace TechnoWorld.Controllers;
// главный контроллер — отвечает за Most страниц: главную, о системе, контакты и ошибки
public class HomeController : Controller
{
// логгер — через него можно писать сообщения в консоль/логи для отладки
private readonly ILogger<HomeController> _logger;
// конструктор — сюда ASP.NET сам подставит логгер (внедрение зависимостей, dependency injection)
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
// метод Index — это главная страница сайта
// когда кто-то заходит на localhost:5000/ — вызывается именно этот метод
public IActionResult Index()
{
// передаём в представление, что заголовок страницы — "Главная"
ViewData["Title"] = "Главная";
// возвращаем представление (страницу Views/Home/Index.cshtml)
return View();
}
// метод About — страница "О системе"
public IActionResult About()
{
// ставим заголовок страницы
ViewData["Title"] = "О системе";
// рендерим представление Views/Home/About.cshtml
return View();
}
// метод Contacts — страница "Контакты" с формой обратной связи
[HttpGet] // эта страница открывается обычным GET-запросом (просто открыли ссылку)
public IActionResult Contacts()
{
// заголовок страницы
ViewData["Title"] = "Контакты";
// рендерим представление Views/Home/Contacts.cshtml
return View();
}
// перегрузка Contacts для POST — когда пользователь отправил форму
// атрибут [HttpPost] говорит: этот метод обрабатывает POST-запросы
[HttpPost]
// принимаем модель формы — ContactViewModel (там имя, телефон, сообщение)
public IActionResult Contacts(ContactViewModel model)
{
// проверяем, заполнил ли пользователь все обязательные поля
if (ModelState.IsValid)
{
// если форма заполнена нормально — сохраняем сообщение в TempData
// TempData — это временная переменная, которая живёт один редирект
// потом покажем пользователю "Ваше сообщение принято"
TempData["ContactSuccess"] = "Ваше сообщение принято! Мы свяжемся с вами в ближайшее время.";
// перенаправляем обратно на страницу Contacts (PRG-паттерн — Post/Redirect/Get)
// это нужно, чтобы при обновлении страницы форма не отправилась заново
return RedirectToAction(nameof(Contacts));
}
// если валидация не прошла — показываем форму снова с ошибками
ViewData["Title"] = "Контакты";
return View(model);
}
// метод Error — страница ошибок (404, 500 и т.д.)
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
// отключаем кеширование этой страницы — чтобы браузер не запоминал ошибку
public IActionResult Error(int? statusCode = null)
{
// создаём модель ошибки и передаём туда ID текущего запроса (чтобы можно было найти в логах)
var model = new ErrorViewModel
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier,
// передаём код ошибки (404, 500 и т.д.) — он приходит из UseStatusCodePagesWithReExecute
StatusCode = statusCode
};
// передаём заголовок в зависимости от кода ошибки
if (statusCode == 404)
ViewData["Title"] = "Страница не найдена";
else
ViewData["Title"] = "Ошибка";
// рендерим представление Views/Shared/Error.cshtml
return View(model);
}
}