2009-02-23 2 views
24

Я знаю, что я могу вызвать метод страницы с JQuery, используя следующий синтаксисвызова метода ASCX страницы с помощью 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 страницы? (web control)

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

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

ответ

26

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

Что вы можете сделать, так это просто создать страницу aspx, содержащую тот же фрагмент html, который у вас есть в вашем файле ascx. На странице aspx необязательно предоставлять полный html-документ (< html> < body> и т. Д.), Он может просто отображать пользовательский элемент управления, который вас интересует.

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

+0

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

+0

Если элемент управления также используется на стороне сервера, я согласен абсолютно. Однако, если цель предназначена исключительно для использования в качестве обратного вызова jQuery, и элемент управления никогда не используется inline другой aspx-страницей на стороне сервера, то это просто лишний беспорядок. В этом случае просто поместите код на страницу aspx. – Clyde

2

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

4

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

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

EDIT: Что сказал Клайд ниже, кажется хорошей идеей. Я делаю что-то подобное себе, включая элемент управления ascx на странице, чья работа более или менее предназначена для размещения ее для доступа с клиентского скрипта.

+0

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

2

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

1

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

2

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

Creating a Page method (ScriptMethod) within an ASCX user control using AJAX, JSON, base classes and reflection

+4

Похоже, что ваша ссылка мертва. –

0

Вы можете написать метод GetDate() в Default.aspx или другой ASPX файл И это можно назвать метод из .ascx ФАЙЛ.

Пример:

В 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); 
} 

});

В Default.aspx.cs:

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