2017-04-18 44 views
0

我試圖讓我的註冊過程中的谷歌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

必需和可以空? – Shyju

+0

@Shyju如果你看我的代碼我的'RegisterViewModel'我已經把它設置爲需要...對嗎? – Skullomania

+1

你的'Register'方法需要'bool',但是你的RegisterViewModel屬性是一個'可空的布爾值'。這些實際上是兩種不同的類型,你不能像另一個那樣通過一個。 –

回答

1

你的HTTP POST操作方法有一個名爲bool類型的captchaValid參數。所以當你提交表單的時候,應該是一個表單字段(在請求體內)或者查詢字符串鍵值(如果表單提交是GET類型的),項目匹配這個名字用於路由工作。路由引擎查找請求數據/查詢字符串,並根據參數重定向到相應的

但您的視圖模型已經有一個名爲captchaValid的屬性。所以從動作方法的參數列表中刪除這一點,一切都沒有問題。(型號粘結劑將這個表單字段張貼的值映射到您的視圖模型的財產)

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

現在,當您提交表單,它會點擊http後操作方法,如果您沒有提供表單中captchaValid字段的值,則模型驗證將失敗,並顯示「captchaValid字段是必需的」消息(因爲它被標記爲必填字段)

2

您可以:

  1. captchaValid屬性更改爲bool
  2. 更改Register方法的簽名採取bool?
  3. 上的默認值決定是否該屬性是空的,然後用您的Register方法與該值聯繫:

bool defaultCaptchaValue = false; 

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

'bool convertedCaptchaValue = captchaValid.GetValueOrDefault(defaultCaptchaValue);'可以說更清楚一點。 –

+0

同意!更新了答案。謝謝@BradleyUffner –

+0

與webforms類似,bool需要在帳戶控制器類的開頭聲明爲公共受保護的bool,對吧?我不能直接在註冊方法之前添加那個 – Skullomania

相關問題