2017-04-18 4 views
0

登録プロセスでgoogle reCaptchaを許可しようとしていますが、表示されています。私はそれをテストするために私の登録を介して実行しようとすると、しかし、私は次のエラーを取得する:エラーのenter image description hereパラメータ辞書にパラメータ 'captchaValid'のヌルエントリが含まれています

私の理解では、captchaValidがRegisterViewModelではありませんそれは私の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'です。これらは実質的に2つの異なるタイプであり、一方を他方として引き渡すことはできません。 –

答えて

1

あなたのHTTPのPOSTアクションメソッドは、boolタイプのcaptchaValidというパラメータがあります。したがって、フォームを送信するときに、は、の1つのフォームフィールド(リクエスト本文の場合)またはクエリ文字列キー(フォームの送信がGETタイプの場合)である必要があります。ルートエンジンは、要求データ/クエリ文字列を検索し、パラメータに基づいて対応するリダイレクト先に転送します。

ビューモデルにはすでにcaptchaValidというプロパティがあります。だからあなたのアクションメソッドのパラメータリストからそれを削除し、すべてが動作するはずです。今

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

(モデルバインダーは、あなたのビューモデルのプロパティに、このフォームフィールドの掲示値をマッピングします)フォームを送信すると、それは意志http post actionメソッドを実行し、フォームから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と同様に、ブールはAccount Controllerクラスの初めにpublicで保護されたブールとして宣言する必要がありますか?私は登録方法の前に直接追加することはできません – Skullomania

関連する問題