inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tìm hiểu ASP.NET CORE trong 14 ngày

Model Validation에 관해

Đã giải quyết

269

anchor37

1 câu hỏi đã được viết

0

안녕하세요.

강의를 기초삼아 프로그램을 만들던 중 좀 애매한 부분이 있어서 질문 드리려 합니다.

모델 유호성검사에 관한 것인데요.

예를 들어

public class Student

{

    [Required(ErrorMessage = "나이를 입력해 주세요.")]

    pubblic int Age { get; set; }

}

위에서 처럼 int 타입에다가 Required를 먹인거에요.

그런데 이게... API를 호출할때 저 부분에 공백문자열이나 null을 주게되면 '나이를 입력해 주세요.'가 아니라

The JSON value could not be converted to System.Int32.

이런 형태의 에러가 발생하니다. 나는 어떻게든 ErrorMessage에 설정된 에러를 보여주고 싶은데 인터넷을 뒤져 몇가지 적용해 봤지만 뜻대로 잘 되지 않고 있습니다.

원하는 방향이 아예 안되는건지.. 아니면 무슨 방법이 있는건지..

해결할 수 있는 방법이 없는 걸까요..?

C# .NET

Câu trả lời 2

0

anchor37

안녕하세요. 우선 답변 정말 감사드립니다.

현재는 Restful API를 만들고 있는데요. 그래서 View가 어떤 식으로 구성될지는 알 수 없습니다. 몇가지 시도를 해보니 null오는 오는 경우는 int? 로 하면 '[Required(ErrorMessage = "나이를 입력해 주세요.")]'설정이 먹히긴 합니다.

그런데 API를 호출할때

{"Age":""}

이런식으로 값을 넘겨버리면 ErrorMessage에서 설정한 오류 메세지가 아니라

The JSON value could not be converted to System.Int32.

이런 식으로 나와버린다는 거죠.

이게.. 틀린건 아닙니다만. 실무에 적용할때 사용자가 저 오류 메세지를 잘 인지를 못할것 같아서 ErrorMessage에 설정한 오류로 내신 낼 수 있는 방법을 찾아보려고 합니다.

그런데 쉽지가 않네요. 일단 저 오류가 나오는 시점 자체가 사용자의 요청이 Controller의 Action에 도달하기도 전에 나와버려요.

선생님께서 예제에 표시해주신 것처럼 Action에다가 AddModelError() 함수를 붙여서 해보려고 해도 여기까지 사용자의 요청이 도달해야 되는데 그 이전에 에러를 내면서 끊어버리니...

정말 방법이 없을까를 고민하고 있는데요.. 아직 까지는 답이 보이지 않네요...

0

dotnet

anchor37님, 반갑습니다.

Age 멤버변수를 볼 때, 필수입력값에 기본값은 자동으로 0값이 주어지겠네요.

질문하신 내용을 볼 때, 원하시는 해결방법은 Age 값에 null이거나 공백문자열이 들어오지 않도록 하시는 것이 맞을 것 같습니다.

MVC 기준으로 설명드리겠습니다. 작동원리는 비슷하니까요.

1. Age 멤버변수에 다음과 같이 attribute를 추가해 주세요.

[Range(1, 100, ErrorMessage = "나이는 1~100세 입니다.")]

2. Controller 액션메서드를 다음과 같이 구성해 주세요.

Public IActionResult Create()

{

    return View(new Student());

}

[HttpPost]

[ValidateAntiForgeryToken]

public IActionResult Create(Student student)

{

        if (student.Age < 1 || student.Age > 100) {

            ModelState.AddModelError("", "나이를 올바르게 입력해 주세요.");

        }

        return View(student);

}

3. View는 다음과 같이 구성해 주세요.

View에서는 나이 선택 기본값을 "0"으로 합니다.

@model Models.Student

@{

    ViewData["Title"] = "등록화면";

}

<h1>@ViewData["Title"]</h1>

<h4>Student</h4>

<hr />

<div class="row">

    <div class="col-md-4">

        <form asp-action="Create">

            <div asp-validation-summary="ModelOnly" class="text-danger"></div>

            <div class="form-group">

                <label asp-for="Age" class="control-label"></label>

                <select asp-for="Age" class="form-control">

                    <option value="0">== 나이 선택 ==</option>

                    <option value="10">10세</option>

                    <option value="20">20세</option>

                    <option value="30">30세</option>

                    <option value="40">40세</option>

                    <option value="50">50세</option>

                </select>

                <span asp-validation-for="Age" class="text-danger"></span>

            </div>

            <div class="form-group">

                <input type="submit" value="Create" class="btn btn-primary" />

            </div>

        </form>

    </div>

</div>

참고로, 캡처화면도 추가합니다.

DB Azure 활용 방법 문의 & UI 구성

0

121

1

Email Unique Index 지정 update 오류

0

147

2

03 보고 있는데 VS2022로 뭘 어째야 하는건지 감이 안와요... 인터페이스가 너무 달라요

0

323

1

ADO.NET 엔터티 데이터 모델이 없어요

0

617

1

두번째 강의 의존성주입에서 startup 클래스가 없습니다.

0

701

2

Login 뷰에서 MembershipController연결 방식문의

0

370

1

14일만에 배우는 ASP.NET CORE 질문

1

411

1

안녕하세요 강사님.

0

375

2

안녕하세요.

0

355

1

질문이 있습니다.

0

331

1

AccessFailedCount 추가 시 NULL값 문제

0

424

1

마이그레이션 완료 후 Update DB 에서 에러가 납니다 ㅠ

0

859

2

시작페이지 바꿀수있을까요?

0

254

1

강사님 레이아웃이 없습니다.

0

334

1

.NET 5.0 FromSql 질문

0

322

1

질문있어요 . 마지막에 나오는 파일xml

0

232

2

Add-Migration ~~ 사용시 add-migration : 'add-migration'이라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.

1

1466

3

2019 비주얼스튜디오 쓰고있습니다. 아무리 찾아봐도 c# 기반 mvc가 없습니다.

0

284

1

03. MVC패턴 강의 질문입니다.

0

345

1

세션1 뷰 생성에서 막히고 있습니다..

0

309

1

로그아웃 후 브라우저 뒤로가기 버튼 클릭시 이전 페이지 접속 안되게 하는 방법

0

1291

1

하위 도메인 쿠키 공유 관련

0

975

2

DbContext를 찾을 수 없습니다.

0

308

1

Controller에서 프로세스 처리 완료 후 alert 띄우는 방법이 있을까요?

0

1055

1