Как вызвать метод страницы Default.aspx.cs из Jquery Ajax? - PullRequest
1 голос
/ 10 января 2012

У меня есть форма регистрации (Default.aspx), в которой изначально отображаются только 2 поля и кнопка (Имя, адрес электронной почты), когда пользователь нажимает кнопку Jquery. Ajax вызывает функцию Default.aspx.cs, которая запрашивает базу данных для проверки пользователь, и если он возвращает нет, то форма расширяется, добавляя поля регистрации.

Я не могу позвонить в Defualt.aspx.cs мой код Default.aspx:

  <script type="text/javascript">
        $(document).ready(function() {
            $('#btnDownload').click(function() {
                //$('#secondary').toggle(1000)
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/PassData",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: AjaxSucceeded,
                    error: AjaxFailed
                });
            });
            function AjaxSucceeded(result) {
                alert(result.d);
            }
            function AjaxFailed(result) {
                alert('Failed');
            } 
        });

    </script>

И Default.aspx.cs (для целей тестирования):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    private static string PassData(string id)
    {
        return "Pass";
    }
}

Но каждый раз, когда я запускаю код, JS возвращает ошибку:

Uncaught ReferenceError: com is not defined
POST http://localhost:2305/temp/Default.aspx/PassData 500 (Internal Server Error) 

Я проверяю несколько сообщений, но ни одно из них не было получено / решено.

Любая помощь будет принята с благодарностью.

Заранее спасибо

1 Ответ

3 голосов
/ 10 января 2012

Вам необходимо украсить метод атрибутом [WebMethod].

EDIT

Вам нужно будет добавить ScriptManager и использовать некоторые методы ASP.NET ajax framework. Я думаю, что то, что вы хотите сделать, невозможно с готовой функциональностью.

Одним из вариантов будет создание HttpHandler, который будет обрабатывать эти методы. Если запрос является POST, вы можете найти тип страницы по URL (в фреймворке есть метод, но я не могу вспомнить, какой именно вам нужно исследовать), создать новый экземпляр и проверить, имеет ли метод WebMethod (или другой понравившийся вам атрибут). Если это так, вы можете вызвать его с помощью отражения и отобразить результат.

EDIT

Как заметил @Antony Highsky, это возможно. Я думаю, что решение состоит в том, чтобы добавить атрибут [WebMethod] и сделать метод de общедоступным (в данном примере это личное).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...