我使用jQuery验证远程时的奇怪场景

时间:2013-11-02 06:19:00

标签: asp.net-mvc jquery-validate

我正在使用jQuery验证插件,我正在调用这样的远程验证器

在这里,我已经像这样设置了遥控规则

rules: {
    NickName: {
        required: true,
        minlength: 3,
        remote: {
            url: '/Employee/IsNickNameTaken',
            type: 'POST',
            dataType: 'text',
            data: {
                nickName: function () {
                    return $('#NickName').val();
                }
            }
        }
    }
    },
    messages: {
    NickName: {
        required: "Nick name is required.",
        minlength: "Nick name should be 3 characters."
    }
}

我的控制器就是这个

public ActionResult IsNickNameTaken(string nickName)
{
    var result = EmployeeManager.IsNickNameTaken(nickName) ? "Nick name is already taken. Try another!": "";
    return Json(result);
}

如果我传递了NickName,我会收到此错误消息

  

“已取名昵称。请尝试另一个!”

enter image description here

正如您所看到的,我的错误消息附在引号中。为什么会这样?怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是因为您为远程规则指定了dataType: 'text'。这将作为jQuery ajax调用的dataType选项传递。这意味着jQuery不会将响应解释为json对象,而是将其作为文本返回。请参阅jQuery ajax method

的dataType选项

您只需要更新规则配置,告诉jQuery响应应该被解释为json。你可以指定dataType: 'json'甚至删除该行,因为远程规则使用的默认值是json:

remote: {
   url: '/Employee/IsNickNameTaken',
   type: 'POST',
   data: {
       nickName: function () {
           return $('#NickName').val();
       }
   }
}

请参阅远程验证方法documentation