我正在尝试在我的注册过程中允许谷歌reCaptcha,我已经让它显示。但是,当我尝试通过我的注册来测试它时,我收到以下错误:
我对错误的理解是captchaValid不在RegisterViewModel
中,这没有任何意义,因为它在我的RegisterViewModel中定义:
[Required]
public bool? captchaValid { get; set; }
在我的控制器中我有:
public async Task<ActionResult> Register(RegisterViewModel model, string message, bool captchaValid)
我在这里缺少什么?
答案 0 :(得分:2)
你可以:
captchaValid
媒体资源更改为bool
Register
方法的签名以采用bool?
Register
方法:
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字段是必需的“(因为它被标记为必填字段)