2017-04-18 4 views
0

등록 절차에서 Google reCaptcha를 허용하려고 시도하고 표시했습니다. 내 등록을 통해 실행하려고하지만 때를 테스트하기 위해 나는 다음과 같은 오류가 발생합니다 : enter image description here매개 변수 사전에 'captchaValid'매개 변수에 대한 null 항목이 포함되어 있습니다.

가 내 RegisterViewModel에 정의되어 여기에 있기 때문에 오류의 나의 이해는 captchaValid이 RegisterViewModel에되지 않는 것입니다,이 말도 안돼

:

[Required] 
public bool? captchaValid { get; set; } 

여기 내 컨트롤러에서 나는이 : 내가 여기서 뭘

public async Task<ActionResult> Register(RegisterViewModel model, string message, bool captchaValid) 

를 놓친 거지?

+1

필수 및 nullable? – Shyju

+0

@Shyju 만약 내 'RegisterViewModel'에 대한 코드를 본다면 이미 필수로 설정했습니다 ... 맞습니까? – Skullomania

+1

'Register' 메소드는'bool'을 취하지 만 RegisterViewModel 속성은'nullable bool'입니다. 이것들은 효과적으로 두 가지 다른 유형이며, 하나를 다른 것으로 전달할 수 없습니다. –

답변

1

귀하의 HTTP POST를 동작 방법은 bool 유형의 captchaValid라는 매개 변수가 있습니다. 따라서 양식을 제출할 때 양식 필드 (요청 본문의 경우) 또는 쿼리 문자열 키 (양식 제출이 GET 유형의 경우)가 작동하도록 라우팅하기 위해이 이름과 일치하는 항목이어야합니다. 경로 엔진은 요청 데이터/쿼리 문자열을 찾고 해당 매개 변수를 기반으로 해당 페이지로 리디렉션합니다.

그러나보기 모델에는 이미 captchaValid이라는 속성이 있습니다. 그래서 액션 메소드 매개 변수 목록에서 해당를 제거하고 모든 일을해야한다. 이제

public async Task<ActionResult> Register(RegisterViewModel model, string message) 
{ 
    // to do : return something 
} 

(모델 바인더보기 모델의 속성이 양식 필드에 게시 된 값을 매핑합니다) 양식을 제출하면, 그것은 것 http post 조치 방법을 실행하고 양식의 captchaValid 필드에 값을 제공하지 않으면 "captchaValid 필드가 필요합니다"라는 메시지와 함께 모델 유효성 검증이 실패합니다 (필수 필드로 표시 되었기 때문에)

2

다음 중 하나를 수행 할 수 있습니다

  1. 에서, Register 방법의 서명이 속성이 null 인 경우 bool?
  2. 이 디폴트 값을 결정 취할 수있는 bool
  3. 변경에 captchaValid 속성을 변경하고 그 값으로 Register 메서드를 호출하십시오 :

.

bool defaultCaptchaValue = false; 

Register(model, message, captchaValid.GetValueOrDefault(defaultCaptchaValue)); 
+0

'bool convertedCaptchaValue = captchaValid.GetValueOrDefault (defaultCaptchaValue);는 틀림없이 분명히 분명합니다. –

+0

동의! 답변을 업데이트했습니다. Thanks @ BradleyUffner –

+0

webforms와 마찬가지로 bool은 Account Controller 클래스 시작 부분에 public으로 보호 된 bool로 선언해야합니다. 등록 방법 바로 앞에 바로 추가 할 수는 없습니다. – Skullomania