вызов метода ascx-страницы с использованием jquery - PullRequest
24 голосов
/ 23 февраля 2009

Я знаю, что могу вызвать метод страницы с помощью jquery, используя следующий синтаксис

$.ajax({
  type: "POST",
  url: "Default.aspx/GetDate",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Replace the div's content with the page method's return.
    $("#Result").text(msg.d);
  }
});

Это работает для aspx страниц, но возможно ли это для ascx страниц? (веб-элементы управления)

Я пробовал это в течение получаса, и, так как я не могу заставить его работать, я задаюсь вопросом, возможно ли это вообще.

Примечание. Просто для ясности, когда я пытаюсь вызвать страницу ascx, я am обновляю URL в jquery:)

Ответы [ 8 ]

26 голосов
/ 23 февраля 2009

Нет, поскольку элементы управления ascx не представляют собой реальный URL-адрес, к которому можно получить доступ с клиентского компьютера. Они предназначены только для серверной части и предназначены для встраивания в другие страницы.

То, что вы, возможно, захотите сделать, - это просто создать страницу aspx, содержащую тот же фрагмент HTML, который есть у вас в файле ascx. Страница aspx не обязательно должна содержать полный HTML-документ ( и т. Д.), Она может просто отображать интересующий вас элемент управления.

Мы используем эту технику все время с плагином ingrid, который требует URL обратного вызова для содержимого таблицы.

4 голосов
/ 23 февраля 2009

Я не думаю, что это возможно, если запросить файл ascx напрямую - т.е. поставляя «MyControl.ascx» в качестве параметра url для $ .ajax (..). Файл ascx не предоставляется непосредственно веб-сервером.

Я полагаю, что вы можете указать URL-адрес страницы aspx, содержащей пользовательский элемент управления, т.е. Если экземпляр MyControl.ascx находится на MyPage.aspx, вам нужно будет указать «MyPage.aspx» в качестве параметра url. Похоже, это может победить цель того, чего вы пытаетесь достичь.

РЕДАКТИРОВАТЬ: То, что Клайд сказал ниже, кажется хорошей идеей. Я сам делаю нечто подобное, включив элемент управления ascx на страницу, задача которой более или менее просто - разместить ее для доступа из клиентского скрипта.

2 голосов
/ 05 ноября 2009

Вот способ обойти ограничение, заключающееся в том, что на страницах ASPX доступны только методы Page (ScriptMethod). В этом примере создается прокси-сервер с использованием базового класса страницы и специального атрибута для украшения методов в коде вашей ASCX-страницы и доступа к ним через клиент.

Создание метода Page (ScriptMethod) в пользовательском элементе управления ASCX с использованием AJAX, JSON, базовых классов и рефлексии

2 голосов
/ 23 февраля 2009

Как насчет создания метода на странице .aspx, который делает то, что ему нужно, с информацией из элемента управления? Я знаю, что люди возвращаются к четвертому вопросу о том, какие элементы управления должны содержать или не содержать, но если элемент управления содержит только свойства и объекты, я бы подумал, что использование функции на странице .aspx может работать для вас. Очевидно, что было бы много компромиссов.

2 голосов
/ 23 февраля 2009

Я не думаю, что это будет возможно, поскольку пользовательские элементы управления не должны быть доступны извне (за пределами страницы). Я предлагаю просто использовать скрипт-сервис (веб-сервис).

1 голос
/ 24 февраля 2009

Я бы создал универсальный обработчик (.ashx), который загружает элемент управления и записывает его обработанный HTML-код в ответ.

0 голосов
/ 30 мая 2014

Вы можете написать метод GetDate () в Default.aspx или другом файле aspx И ВЫ МОЖЕТЕ ВЫЗВАТЬ ЭТО МЕТОД ИЗ ФАЙЛА .ASCX .

Ex:

В UserControl.ascx:

$.ajax({
 type: "POST",
 url: "Default.aspx/GetDate",
 data: "{}",
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
 // Replace the div's content with the page method's return.
 $("#Result").text(msg.d);
}

}); * * 1 010

In Default.aspx.cs:

Public void GetDate() //Public static void { //your code here }

...