ASP.NET Core MVC에서 appsettings.json을 이용한 날짜/시간 선택기 설정
이 문서는 appsettings.json
파일의 설정을 통해 웹 페이지의 날짜/시간 선택기에서 초 단위를 포함할 것인지 제외할 것인지를 결정하는 방법을 설명합니다.
1. appsettings.json 설정 추가
appsettings.json
파일에 아래와 같은 설정을 추가합니다:
{
"Settings": {
"IncludeSeconds": false
},
// 기타 설정들...
}
기본적으로 초를 포함하지 않도록 설정합니다. 필요에 따라 이 값을 true
로 변경하여 초를 포함하게 할 수 있습니다.
2. Startup.cs에서 설정 로드
먼저 바인딩에 사용할 모델 클래스를 정의합니다:
public class SiteSettings
{
public bool IncludeSeconds { get; set; }
}
이후 Startup.cs
의 ConfigureServices
메서드에서 설정을 바인딩합니다:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<SiteSettings>(Configuration.GetSection("Settings"));
// 기타 설정들...
}
3. 뷰에서 설정 사용하기
뷰에 전달하기 위한 뷰 모델을 작성합니다:
public class DateInputViewModel
{
public bool IncludeSeconds { get; set; }
}
컨트롤러에서는 아래와 같이 설정 값을 뷰 모델로 바인딩합니다:
public IActionResult MyAction()
{
var settings = new SiteSettings();
_configuration.GetSection("Settings").Bind(settings);
var viewModel = new DateInputViewModel
{
IncludeSeconds = settings.IncludeSeconds
};
return View(viewModel);
}
뷰에서는 뷰 모델의 설정 값을 사용하여 날짜/시간 선택기의 형식을 결정합니다:
@model DateInputViewModel
@if(Model.IncludeSeconds)
{
<input type="datetime-local" />
}
else
{
// 초를 제외하고 표시
<input type="datetime-local" step="60" />
}
이렇게 설정하면 appsettings.json
의 설정에 따라 웹 페이지의 날짜 및 시간 선택기의 형식을 동적으로 변경할 수 있습니다.
4. MVC 뷰에서 직접 Settings 값을 읽기
MVC 뷰에서 직접 설정 값을 읽어들이려면 먼저 IOptions
를 사용하여 바인딩된 설정 값을 주입받아야 합니다.
4.1. 뷰에 DI (Dependency Injection) 설정
뷰에서 서비스나 설정 값을 주입받기 위해 _ViewImports.cshtml
파일에 아래 코드를 추가합니다:
@using Microsoft.Extensions.Options
@inject IOptions<SiteSettings> SiteSettings
4.2. 뷰에서 설정 사용
이제 뷰에서 SiteSettings
객체를 통해 설정 값을 직접 읽을 수 있습니다. 예를 들면:
@if(SiteSettings.Value.IncludeSeconds)
{
<input type="datetime-local" />
}
else
{
<input type="datetime-local" step="60" />
}
이렇게 하면 컨트롤러를 거치지 않고 뷰에서 직접 appsettings.json
의 설정 값을 읽어올 수 있습니다. 하지만, 일반적으로 MVC 패턴에서는 컨트롤러를 통해 모든 데이터를 뷰에 전달하는 것이 좋은 습관입니다. 직접 읽는 방법은 특정 케이스에서만 사용하는 것이 좋습니다.