Write.cshtml.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using MediatR;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.RazorPages;
  4. using System.ComponentModel;
  5. using System.ComponentModel.DataAnnotations;
  6. namespace Admin.Pages.Popup;
  7. public class WriteModel(IMediator mediator) : PageModel
  8. {
  9. public string QueryString { get; private set; } = "";
  10. [BindProperty]
  11. public InputModel Input { get; set; } = new();
  12. public sealed class InputModel
  13. {
  14. [DisplayName("제목")]
  15. [DataType(DataType.Text)]
  16. [Required(ErrorMessage = "{0}는 필수입니다.")]
  17. [StringLength(255, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  18. public string Subject { get; set; } = default!;
  19. [DisplayName("내용")]
  20. [DataType(DataType.Html)]
  21. [StringLength(4000, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  22. public string? Content { get; set; }
  23. [DisplayName("주소")]
  24. [DataType(DataType.Url)]
  25. [StringLength(255, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  26. public string? Link { get; set; }
  27. [DisplayName("시작 일시")]
  28. [DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH:mm}", ApplyFormatInEditMode = true)]
  29. public DateTime? StartAt { get; set; }
  30. [DisplayName("종료 일시")]
  31. [DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH:mm}", ApplyFormatInEditMode = true)]
  32. public DateTime? EndAt { get; set; }
  33. [DisplayName("순서")]
  34. [Range(-9999, 9999)]
  35. public short Order { get; set; }
  36. [DisplayName("사용 여부")]
  37. public bool IsActive { get; set; } = false;
  38. }
  39. public Task OnGetAsync(CancellationToken _)
  40. {
  41. QueryString = HttpContext.Request.QueryString.HasValue ? HttpContext.Request.QueryString.Value!.TrimStart('?') : "";
  42. return Task.CompletedTask;
  43. }
  44. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  45. {
  46. try
  47. {
  48. if (!ModelState.IsValid)
  49. {
  50. throw new Exception("유효성 검사에 실패했습니다.");
  51. }
  52. var command = new CreatePopup.Command(
  53. Input.Subject,
  54. Input.Content,
  55. Input.Link,
  56. Input.StartAt,
  57. Input.EndAt,
  58. Input.Order,
  59. Input.IsActive
  60. );
  61. await mediator.Send(command, ct);
  62. TempData["SuccessMessage"] = $"{Input.Subject} 팝업이 등록되었습니다.";
  63. return RedirectToPage("/Popup/Index");
  64. }
  65. catch (Exception e)
  66. {
  67. TempData["ErrorMessages"] = e.Message;
  68. return Redirect($"/Popup/Write?{QueryString}");
  69. }
  70. }
  71. }