모델의 내 규칙에서 확인되지 않은 비즈니스 규칙에 대한 유효성 검사 메소드를 만들었지 만 제대로 작동하도록하는 데 문제가 있습니다. 가능한 시나리오는 두 가지 (고객 또는 판매자 등록)이므로 개별보기 및 모델로 별도로 처리해야합니다. 판매자 등록은 기본 정보에 대한 고객 등록을 상속하므로 고객의 모든 필드도 판매자에 포함됩니다. 그러나 두 가지 모델로 작업하고 있기 때문에 두 필드 모두 유효성 검사를 수행하는 필드가 같지만 동일한 유효성 검사 메서드를 사용하려면 Object
을 사용해야했습니다. 하지만 불행히도 나는 그렇게하는 데 어려움을 겪고있다.유형에 따라 객체 캐스팅
[CustomHandleError]
private bool ValidateRegistrationForm (Object registerViewModelObject) {
if (registerViewModelObject is RegisterViewModel)
{
RegisterViewModel registerViewModel =
(RegisterViewModel)registerViewModelObject;
}
else
{
RegisterSellerViewModel registerViewModel =
(RegisterSellerViewModel)registerViewModelObject;
}
if (ModelState.IsValid)
{
string [] names = registerViewModel.Name.Split (
new string [] {" "}, StringSplitOptions.RemoveEmptyEntries);
if (names.Length == 1)
ModelState.AddModelError ("Name", "Fill your full name");
if (CustomerUtilities.IsCpf (registerViewModel.Identity) == false)
ModelState.AddModelError ("Identity", "Invalid CPF value");
if (this.AuthenticatorService.IsExistentUser (registerViewModel.Email))
ModelState.AddModelError ("Email", "Email already registered");
}
}
당신이 볼 수 있듯이, if (ModelState.IsValid)
후 인텔리이 현재 컨텍스트에 registerViewModel을 찾을 수 없습니다. 그 이유는 궁금하다. 그 변수는 if와 else의 내부에 정의되어 있기 때문에 정의되지 않은 채로 그 코드에 접근 할 수있는 방법이 없다.
새 방법을 만들거나 2 개의 변수를 전달하는 것 이외에 다른 해결 방법이 있습니까?
여기에 코드를 이미지가 아닌 텍스트로 붙여 넣으십시오. –
코드 블록을 코드 블록으로 붙여 넣으면보다 정확한 답변을 얻을 수 있습니다. 올바른 예제를 쉽게 생성 할 수 있기 때문입니다. – driis
빠른 수정은 if 및 else 블록에 코드를 복사하여 붙여 넣는 것입니다. 문제는 등록에 대한 공통 기본 클래스가 없거나 상속이 제대로 사용되지 않는다는 것입니다 (판매자 등록이 일종의 고객 등록으로 보이지 않으므로 상속이 어색 할 것입니다). 이 문제를 해결하려면 디자인 작업을해야합니다. –