Asp.net mvc 3 在MVC3中使用远程验证时为空值

Asp.net mvc 3 在MVC3中使用远程验证时为空值,asp.net-mvc-3,asp.net-mvc-validation,Asp.net Mvc 3,Asp.net Mvc Validation,我在远程验证方面遇到问题 我有一个viewmodel,其属性上添加了一个远程验证器,但当我运行表单并在文本框中输入字符串时,传递给控制器的值为null viewmodel中的属性如下所示: [Required(ErrorMessage = "Enter the host's name")] [Remote("ValidateHostFullName", "BoardroomBooking", ErrorMessage = "Enter a different name")] [DisplayNa

我在远程验证方面遇到问题

我有一个viewmodel,其属性上添加了一个远程验证器,但当我运行表单并在文本框中输入字符串时,传递给控制器的值为null

viewmodel中的属性如下所示:

[Required(ErrorMessage = "Enter the host's name")]
[Remote("ValidateHostFullName", "BoardroomBooking", ErrorMessage = "Enter a different name")]
[DisplayName("Host's Name")]
public string HostFullName { get; set; }
public ActionResult ValidateHostFullName([Bind(Prefix="BookingReceptionViewModel")]string HostFullName)
{
    if (!HostFullName.Equals("John Smith"))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("{0} is not allowed", JsonRequestBehavior.AllowGet);
}
控制器中验证程序的代码如下所示:

[Required(ErrorMessage = "Enter the host's name")]
[Remote("ValidateHostFullName", "BoardroomBooking", ErrorMessage = "Enter a different name")]
[DisplayName("Host's Name")]
public string HostFullName { get; set; }
public ActionResult ValidateHostFullName([Bind(Prefix="BookingReceptionViewModel")]string HostFullName)
{
    if (!HostFullName.Equals("John Smith"))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("{0} is not allowed", JsonRequestBehavior.AllowGet);
}
无论框中键入什么,HostFullName的字符串值都显示为null。我尝试过使用和不使用绑定前缀,这没有什么区别

我在一个模型上试过这个方法,效果很好,只有在使用viewmodel时才出现问题

谢谢


马克

我也有同样的问题。进入
ValidateHostFullName()
的参数必须与输入名称相同。

我遇到了相同的问题。呈现的html控件没有以类名作为前缀,但在远程验证代码中,我通过以classname.propertyname作为前缀进行绑定。移除这个绑定解决了我的问题。或者只在属性名前加前缀对我来说也很好。

生成的HTML中相应输入字段的
名称是什么?当您使用FireBug进行检查时,AJAX请求中到底发布了什么值?@DarinDimitrov该字段的名称被生成为HostFullName。请求在FireBug中显示为“GET/BoardroomBooking/ValidateHostFullName?callback=jQuery15104607706305105239_1319095613374&HostFullName=John+Smith&_=1319095674721”。callback参数来自哪里?此外,查询字符串参数被称为
HostFullName
,因此您的操作不需要Bind属性。但我认为你在这个请求上还有其他问题。它看起来像是一个JSONP请求,它不是它应该的样子。我在没有Bind属性的情况下尝试了它,得到了相同的结果,所以我把它放进去看看是否有什么不同。我不确定回调参数来自哪里。我没想到会看到这一点——我在这里看到了其他问题,看到了请求应该如何形成,但没有一个是这样的。我会做一些挖掘,看看是什么原因造成的。@DarinDimitrov非常感谢你在这方面的帮助-它为我指明了正确的方向。我已经将ValidateHostFullName actionresult更改为接受HttpPost,并删除了Bind属性,现在它将正确返回。我仍然不知道JSONP请求在原始代码中来自何处。我已经禁用了所有第三方脚本,它只是不断出现。我同意张贴的答案。我试过了。参数的名称必须与输入名称匹配,但不区分大小写(我的输入名称是mix cases,但参数可以全部小写)。这是非常糟糕的限制。