Вызов веб-метода в файле aspx.cs с использованием jquery ajax

У меня есть default.aspx.cs, который содержит мой веб-метод для вызова, и у меня есть файл js, содержащий мой jquery ajax. Я не могу вызвать веб-метод.

Вот мой default.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    {
        string[] MyArray = new string[1];
        MyArray[0] = "My Value";

        Grid1D.DataSource = MyArray;
        Grid1D.DataBind();
    }

    [WebMethod]
    public Details[] getDetails(string columnname, string inputVal)
    {
        List<Details> list = new List<Details>();

        DbAccess dbacc = new DbAccess();

        DataTable dt = dbacc.getReportDetails(columnname, inputVal);

        foreach (DataRow row in dt.Rows)
        {
            Details _Details = new Details();
            _Details.memid = row["memid"].ToString();
            _Details.usrname = row["usrname"].ToString();
            _Details.fullname = row["fullname"].ToString();
            _Details.fname = row["fname"].ToString();
            _Details.mname = row["mname"].ToString();
            _Details.lname = row["lname"].ToString();
            _Details.bdate = row["bdate"].ToString();
            _Details.address = row["address"].ToString();
            _Details.sponsorid = row["sponsor_id"].ToString();
            _Details.parentid = row["parent_id"].ToString();
            _Details.placement = row["placement"].ToString();
            _Details.datejoined = row["date_joined"].ToString();


            list.Add(_Details);
        }

        Grid1D.DataSource = list.ToArray();
        Grid1D.DataBind();

        return list.ToArray();
    }

И вот мой файл js:

function retrieveReportData() {
    var columnName = $("#ddlFilters").val();
    var input = $("#tags").val();

    if (columnName != "Select") {

        var Data = JSON.stringify({ columnname: columnName, inputVal: input });

        alert(Data);

        $.ajax({

            url: "Default.aspx/getDetails",
            data: Data,
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (mydata) {

                alert(mydata.d);
            }
        });

    }
    else 
        alert("Please choose search filter");
}

Вы можете заметить, что я предупреждаю свои данные, чтобы убедиться, что у меня есть правильные значения для отправки в мой веб-метод. Но, как я уже сказал, он не может вызвать мой веб-метод и не переходит к моей функции успеха в моем ajax. Помощь! Спасибо! :)


person Luke Villanueva    schedule 21.05.2012    source источник


Ответы (3)


Ваш веб-метод должен быть static.

[WebMethod]
public static Details[] getDetails(string columnname, string inputVal)
person Claudio Redi    schedule 21.05.2012
comment
Возникает ошибка, когда я помещаю static в свой веб-метод. Ошибка 2 Ссылка на объект требуется для нестатического поля, метода или свойства «SearchMember_Updated.Default.Grid1D». - person Luke Villanueva; 21.05.2012
comment
+1. @ ljpv14 ljpv14, так что не ссылайтесь на него ... В вашем случае нет смысла обновлять какой-либо пользовательский интерфейс в веб-методе, поскольку соответствующей HTML-страницы нет. - person Alexei Levenkov; 21.05.2012
comment
Вы не можете привязать серверный элемент управления к веб-методу. Используйте его для загрузки/сохранения данных с/на сервер. Боюсь, вам придется изменить эту логику. - person Claudio Redi; 21.05.2012
comment
@AlexeiLevenkov Кажется, я сказал, что мой веб-метод находится в моем default.aspx.cs - person Luke Villanueva; 21.05.2012
comment
Значит ли это, что мне нужно передать его другим методом, чтобы связать его с моим gridview? Как я могу передать список другому методу? @Клаудио Реди. Спасибо! - person Luke Villanueva; 21.05.2012
comment
@ ljpv14: вам нужно привязать сетку к обычному потоку страницы, вы не можете сделать это при вызове веб-метода. - person Claudio Redi; 21.05.2012
comment
@КлаудиоРеди СПАСИБО! Я просто установил static и в моей функции успеха в моем ajax я добавил ее к своему сетке, и она работает. Большое спасибо за эту идею. Еще вопрос, как удалить последний добавленный набор данных? Потому что, когда я пытаюсь нажать кнопку, последние добавленные данные все еще там и просто добавляются внизу новые. Спасибо! - person Luke Villanueva; 21.05.2012
comment
Остерегайтесь: ASPX Static, ASMX Non Static - person StuartLC; 23.03.2015

Это полный пример, который показывает весь процесс от начала до конца того, как вызвать «веб-метод» на стороне сервера через запрос ajax с использованием страницы asp.net.

http://www.codeproject.com/Questions/374136/Call-Page-Method-From-Jquery-Ajax-Call

person Zhan    schedule 20.09.2012

Попробуйте установить type на «Получить» и отправить параметры в URL вместо данных

url: "Default.aspx/getDetails/?colunmname="+colname+"&inputVal="+inputValue,
type: "GET"
person Asif Mushtaq    schedule 21.05.2012
comment
Извините, но я не понял, что вы только что сказали. - person Luke Villanueva; 21.05.2012
comment
Я имею в виду, что вы должны передать параметры в URL-адресе и установить тип GET. Пожалуйста, проверьте мой обновленный ответ - person Asif Mushtaq; 21.05.2012
comment
Наконец-то я смог вызвать свой веб-метод. Почему он не останавливается на строке, где я установил точку останова? Означает ли это, что он не переходит к веб-методу? - person Luke Villanueva; 21.05.2012
comment
Вы также можете использовать данные: ?counmname=+colname+&inputVal=+inputValue - person Asif Mushtaq; 21.05.2012
comment
Упс. Я проверил еще раз и все же получил внутреннюю ошибку сервера. - person Luke Villanueva; 21.05.2012