MVC에서 모델스테이트 사용
4186 단어 mvcmodelstate 사용
등록 정보
Errors
모델이 바인딩되는 동안 발생한 오류가 포함된 ModelErrorCollection 객체를 반환합니다.
Value
모델이 바인딩되는 동안 바인딩된 값을 캡슐화하는 ValueProviderResult 객체를 반환합니다.
Html 액세스 방법 및 ModelState 통합
Html와 같은 HTML 액세스 방법내용을 내보낼 때 ModelState 컬렉션을 확인하는 TextBox()이 속성에 예외나 오류가 발견되면 사용자가 입력한 내용과 CSS 오류 클래스가 표시됩니다.
예를 들어, Edit 뷰에서는 Html을 사용합니다.TextBox() 액세스 방법은 Dinner 객체의 EventDate 속성을 나타냅니다.
<%= Html.TextBox("EventDate", String.Format("{0:g}", Model.EventDate)) %>
오류가 있을 때 보기를 보일 때 Html.TextBox () 방법은 ModelState 집합을 검사하고, 디너 대상의 EventDate 속성에 오류가 있는지 확인합니다.오류가 발견되면 사용자가 제출한 EntLib 를 매개 변수 값으로 입력하고 type="text"value="BOGUS"/>
CSS 오류 클래스의 스타일을 사용자 정의할 수 있습니다.기본 CSS 오류 클래스는\content\site에 정의되어 있습니다.css 파일의 스타일 정의는 다음과 같습니다.
.input-validation-error
{
border: 1px solid #ff0000;
background-color: #ffeeee;
}
Html.ValidationMessage() 액세스 방법
Html.ValidationMessage() 액세스 가능성은 특정 Model 속성과 관련된 ModelState 오류 정보를 출력하는 데 사용됩니다.
<%= Html.ValidationMessage("EventDate") %>
위의 코드 출력:
The value ‘EntLib’ is invalid
Html.ValidationMessage() 액세스 방법은 개발자가 오류 메시지를 덮어쓸 수 있도록 하는 두 번째 매개변수도 지원합니다.
<%= Html.ValidationMessage("EventDate", "*") %>
위의 코드 출력:
* 기본 오류 정보가 아닙니다.
Html.ValidationSummary() 액세스 방법
Html.ValidationSummary () 보조 방법은 총괄적인 오류 메시지를 보여 줍니다.
Html.ValidationSummary() 액세스 가능성은 선택적 문자열 매개변수 ㎡에서 개괄적인 오류 메시지를 정의하여 모든 세부 오류 정보 앞에 표시합니다.
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
CSS 설정 오류 메시지 스타일도 정의할 수 있습니다.
AddRuleViolations 액세스 방법 사용
초기 HTTP-POST Edit의 실현 방법은foreach 순환 문장을 사용하여 디너 대상의 Rule Violations를 옮겨다니고 controller의 ModelState 집합에 추가합니다.
catch
{
foreach (var issue in dinner.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(dinner);
}
코드를 좀 더 간결하게 하기 위해서, 우리는 ControllerHelpers 클래스를 NerdDinner 프로젝트에 추가하고, AddRuleViolations 확장 방법을 실현하며, ASP를 추가했습니다.NET MVC ModelStateDictionary 클래스에 대한 액세스 가능성이 확장 방법은 RuleViolation 오류 정보를 사용하여 ModelStateDictionary 컬렉션 클래스를 채우는 로직을 캡슐화합니다.
public static class ControllerHelpers
{
public static void AddRuleViolations(this ModelStateDictionary modelState,
IEnumerable
{
foreach (RuleViolation issue in errors)
{
modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
}
}
다음에 HTTP-POST Edit 방법을 업데이트하고 상기 확장 방법을 사용하여 디너의 Rule Violations가 Model State 집합을 채웁니다.
Edit Action 메소드 구현 완료
다음 코드는 디렉터에서 Edit의 모든 논리를 지원합니다.
C# 코드 복제
//// GET: /Dinners/Edit/2public ActionResult Edit(int id){Dinner dinner = dinnerRepository.GetDinner(id);return View(dinner);} //// POST: /Dinners/Edit/2[AcceptVerbs(HttpVerbs.Post)]public ActionResult Edit(int id, FormCollection formValues)
{Dinner dinner = dinnerRepository.GetDinner(id); try{UpdateModel(dinner);dinnerRepository.Save();return RedirectToAction("Details", new { id = dinner.DinnerID });}catch{ModelState.AddRuleViolations(dinner.GetRuleViolations());return View(dinner);}}
Edit 방법의 실현 장점에 대해 Controller 클래스뿐만 아니라 View 보기 템플릿도 디너 모델 클래스의 특정한 검증 방법이나 업무 규칙에 신경 쓸 필요가 없다.이후에는 Controller와 View에 코드 변경을 요청하지 않고도 모델 클래스에 대한 비즈니스 규칙을 추가할 수 있습니다.이렇게 하면 우리는 수요에 따라 최소한의 코드 변경으로 응용 프로그램을 유연하게 개선할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
클린 아키텍처의 Presenter를 이해하기 어려운 것은 MVC 2가 아니기 때문에클린 아키텍처에는 구체적인 클래스 구성 예를 보여주는 다음 그림이 있습니다. 이 그림 중에서 Presenter와 Output Boundary(Presenter의 인터페이스)만 구체 구현을 이미지하는 것이 매우 어렵다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.