Использовать данные, возвращаемые веб-сервисом (jQuery, ASP.Net) - PullRequest
1 голос
/ 25 июля 2011

У меня есть ASP.Net-кнопка, которая при нажатии запускает код на стороне клиента и на стороне сервера.При определенных условиях выполнение последнего должно быть предотвращено.

<asp:LinkButton OnClientClick="if(CheckItems() == false) return false;" runat="server" 
       ID="Button" onclick="Button_Click">Insert</asp:LinkButton>

Метод CheckItems вызывает веб-сервис.Если ответ от веб-службы «DataFound», метод CheckItems должен вернуть false.

function CheckItems() {

        PageMethods.CheckItems($('#<%= txtField.ClientID  %>').val(), function(response) {

            if (response == "DataFound") {
                alert("The text you entered does already exist.");
                return false;
            }
        });
    }

С этим кодом CheckItems не возвращает falseКак этого достичь?

Веб-метод:

[WebMethod]
    public static string CheckItems(string name)
    {
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString);

        try
        {
            conn.Open();

            var selectCommand = conn.CreateCommand();

            selectCommand.CommandText = @"SELECT COUNT(*) FROM [Table] WHERE Name = @Name";
            selectCommand.Parameters.Add(new SqlParameter("Name", name));

            int results = (int)selectCommand.ExecuteScalar();

            if (results > 0)
                return "DataFound";
            else
                return "NoDataFound";
        }
        finally
        {
            conn.Close();
        }
    }

1 Ответ

0 голосов
/ 25 июля 2011

Поскольку ваша функция javascript выполняет асинхронный вызов на сервер, она не может немедленно вернуть результат вашему событию click. Вам нужно будет разделить ваши вещи на отдельные функции javascript, например:

<a onclick="buttonClicked();">Insert</a>

function buttonClicked() {
    PageMethods.CheckItems($('#<%= txtField.ClientID  %>').val(), function(response) {
        if (response == "DataFound") {
            alert("The text you entered does already exist.");
        } else {
            performPostback();
        }
    });
}

function performPostback() {
    // Actually do your form post, maybe using __doPostBack
}
...