参数字典包含参数'captchaValid'的空条目

时间:2017-04-18 19:25:19

标签: c# asp.net-mvc recaptcha

我正在尝试在我的注册过程中允许谷歌reCaptcha,我已经让它显示。但是,当我尝试通过我的注册来测试它时,我收到以下错误:enter image description here

我对错误的理解是captchaValid不在RegisterViewModel中,这没有任何意义,因为它在我的RegisterViewModel中定义:

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

在我的控制器中我有:

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

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

你可以:

  1. 将您的captchaValid媒体资源更改为bool
  2. 更改Register方法的签名以采用bool?
  3. 如果属性为null,则确定默认值,然后使用该值调用Register方法:
  4. bool defaultCaptchaValue = false;
    
    Register(model, message, captchaValid.GetValueOrDefault(defaultCaptchaValue));
    

答案 1 :(得分:1)

您的http post action方法有一个名为captchaValid bool类型的参数。因此,当您提交表单时,应该一个表单字段(在请求正文中)或查询字符串键(如果表单提交是GET类型)项目匹配此名称以便路由工作。路由引擎查找请求数据/查询字符串,并根据参数重定向到相应的

但是您的视图模型已经有一个名为captchaValid的属性。因此,从操作方法参数列表中删除它,一切都应该有效。(模型绑定器会将此表单字段的已发布值映射到视图模型的属性)

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

现在当您提交表单时,它将点击http post action方法,如果您没有从表单中提供captchaValid字段的值,则模型验证将失败并显示消息“captchaValid字段是必需的“(因为它被标记为必填字段)