상세 컨텐츠

본문 제목

[.NET Core] ASP.NET Core에서 Model Binding Error Message 수정

Programing/.NET Core

by 호짱 HoZang 2020. 10. 18. 20:59

본문

[.NET Core] ASP.NET Core에서 Model Binding Error Message 수정

 

1. DefaultModelBindingMessageProvider 설정

namespace project
{
    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)
        {
            .
            .
            .
            services.AddControllersWithViews(options => 
            {
                options.ModelBindingMessageProvider.SetValueIsInvalidAccessor((value) => $"'{value}'은(는) 올바른 형식이 아닙니다.");
                options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((value, name) => $"'{value}'은(는) {name}의 형식에 맞지 않습니다.");
                options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor((value) => $"'{value}'은(는) 숫자 형식이 아닙니다.");
                options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor((value) => $"'{value}'은(는) 올바른 형식이 아닙니다.");
                // 더 많은 ModelBindingMessage 설정은
                // DefaultModelBindingMessageProvider Class의 setter Method들을 확인해보고
                // 필요한 설정을 하면된다.
            }
            .
            .
            .
        }
    }
}

ASP.NET의 Model Class의 Attrebute에서 Validation을 설정할 경우

The value '' is invalid. 또는 The value 'a' is not valid for Price. 와같은 오류 메시지를 나오는 경우가 있다.

Model Class의 Validation Attribute에 ErrorMessage 인자값을 설정해도 이 메세지는 변경이 안된다.

이유는 Model Instance의 Property에 값을 Valdation하기 이전에 Binding 단계에서 오류가 생긴것이고,

위 메세지들은 DefaultModelBindingMessageProvider에서 설정해야한다.

decimal이나 int처럼 null값을 허용하지 않거나 제한된 데이터만 담을 수있는 자료형의 Property들은

Binding된 데이터가 없거나 자료형에 맞지않는 데이터가 Binding될 경우 Validation 설정의 오류메세지가 아닌,

DefaultModelBindingMessageProvider에 설정된 메세지가 View에 보여진다.

 

[참고 글]

github.com/aspnet/Announcements/issues/240

 

Breaking change to ModelBindingMessageProvider · Issue #240 · aspnet/Announcements

We've made a few changes to ModelBindingMessageProvider and related types, as per the discussion at aspnet/Mvc#6241. TLDR: Having an interface (IModelBindingMessageProvider) that describes all ...

github.com

 

관련글 더보기

댓글 영역