ASP.NET WebForms& jQuery Validate的远程方法

时间:2015-04-06 15:14:31

标签: c# asp.net webforms jquery-validate

任何人都可以告诉我如何让ASP.NET WebMethod返回正确格式的数据以供jQuery Validate显示?这是我的代码:

客户端代码

$('#txtUName').rules('add', {
    remote: {
        type: 'POST',
        url: 'Register.aspx/ValidateUserNameOrEmail',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({
            'data' : $('#txtUName').val(),
            'valUser' : true
        }),
        dataFilter: function(result) {
            return $.parseJSON(result).d;
        },
        dataType: 'json'
    }
});

服务器端代码

[WebMethod]
public static object ValidateUserNameOrEmail(string data, bool valUser)
{
    var col = valUser ? "userName" : "email";
    var label = valUser ? "username" : "email address";

    using (var conn = new SqlConnection(dbConn))
    using (var comm = new SqlCommand("", conn))
    {
        conn.Open();
        comm.CommandText = "SELECT userId FROM [dbo]." +
            "[User] WHERE " + col + " = '" + data + "'";
        if (comm.ExecuteScalar() != null)
        {
            // Entered username or email already exists in the DB
            return "A user with that " + label + " already " +
                "exists. Please enter a unique " + label + ".";
        }
    }
    return true;
}

tl; dr - 我是否应该放弃这个假设才能正常工作,并使用自定义远程消息?这应该有效,因为我可以看到,当用户名已被占用时,肯定会从稍后调用element.valid()返回false。但我真的想避免在可能的情况下指定自定义消息。

编辑:确实上面的解决方案有效,所以我现在就会使用它,但如果可以,请继续阅读并提出更好的解决方案!

单步执行这两段代码,我可以看到所有内容都被调用并返回奇妙,但jQuery Validate只是拒绝显示该死的错误!

根据official docs

  

响应被评估为JSON,对于有效元素必须为true,并且对于无效元素,可以是任何false,undefined或null,使用默认消息; 或字符串,例如。 “该名称已被采用,请尝试使用peter123”显示为错误消息。

那么我做错了什么?正如您可以清楚地看到的那样,我在成功的情况下返回true或者在其他情况下返回相应的错误消息字符串,就像文档说我应该的那样(很好看;见下文)。

根据这些文档和Asp.Net WebForm JQuery remote Validation,我应该从服务器返回一个JSON对象,但是当我在客户端将其解析为JSON时,我看不出这会有什么不同,徒劳无功。我会尝试在Jeff Siver的评论中提出的解决方案,但我猜这是针对MVC的,因为我的系统上不存在Sys命名空间。

Sherif Ahmed对jQuery Validator#remote with ASP.NET WebForms的回答几乎与我的代码完全相同,但我得到了完全不同的结果!

在这两个帖子之后我放弃了建议的StackOverflow帖子......我的情况似乎与他们所有人的情况非常不同。

编辑@Sparky - 嗨,谢谢你的回复。我链接的第一篇文章确实提到使用JavaScriptSerializer类以正确的格式返回数据,所以我很抱歉没有看到更早的数据。但是,这不是您链接的答案。你联系到的答案(以及我读到的)提到了一些未知的Json类......正如Melursus所说:

  

你能给我一个如何返回JSON对象的例子,因为我找不到这个命名空间。我也没有找到ActionResult命名空间。所以,我不明白我如何使用建议的解决方案。

我最初看到并停止阅读,但您的评论促使我做进一步的研究,并找到可能真正起作用的JavaScriptSerializer解决方案。我会试一试让你知道: - )

0 个答案:

没有答案