带有无效变量名的jQuery验证远程:如何修复?

时间:2016-04-25 11:25:24

标签: c# jquery asp.net-mvc-4 jquery-validate unobtrusive-validation

我正在使用jQuery验证进行remote验证。

我正在尝试在MVC中调用我的服务器端代码,但问题是我的变量是嵌套类:

public class Customer
{
    public State HouseState {get;set;}
}

public class State
{
    public string Name {get;set;}
}

在我的* .cshtml中我有这个:

@Html.TextBoxFor(m => m.HouseState.Name, new { placeholder = "State Name"})

我正在添加验证:

    $.validator.addMethod("verify", verify);

    $('#HouseState_Name').rules('add', {
        verify: true,
        remote: '@Url.Content("~/Home/Validate")',
        messages: { verify: "No!" }
    });

在这种情况下,它将生成如下的GET请求:

http://localhost/Home/Validate?HouseState.Name=CA

问题是它希望服务器中的变量为House.Name,这是C#中无效的变量名。

有没有办法在客户端自定义此变量或为服务器中的变量创建别名?我已经尝试过使用FormCollection但它有效,但远非完美。

public JsonResult Validate(FormCollection form)
{
    ...
}

我想要一些方法让它像这样工作:

public JsonResult Validate(string stateName)
{
    ...
}

1 个答案:

答案 0 :(得分:3)

您可以使用Prefix的{​​{1}}属性有效地“删除”前缀。

BindAttribute

所以public JsonResult Validate([Bind(Prefix="HouseState.Name")]string Name) 在绑定<​​/ p>时变为name="HouseState.Name"