Включение асинхронных обратных вызовов в пользовательских элементах управления asp.net - PullRequest
0 голосов
/ 30 марта 2012

Какой идеальный способ для включения асинхронных ... Ajax-подобных обратных вызовов в пользовательском элементе управления asp.net. Текущий дизайн имеет страницу asp.net, использующую несколько пользовательских элементов управления с периодическими постбеками и перезагрузками страницы.

Я пытаюсь использовать функцию перезагрузки страницы без использования JavaScript. Это возможно?

Если нет, то как мне включить объединенную работу без перезагрузки страницы в этом сценарии?

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

На самом деле есть два возможных решения вашей проблемы:

Панель обновления

Как уже упоминалось многими, вы можете обернуть существующие элементы управления в UpdatePanel (ссылка) Тем не менее, это все еще заставляет содержимое панели отправлять обратно на сервер, но это наиболее простой и быстрый способ реализации с наибольшим , заметным , удобством использованияулучшение.

Асинхронные обратные вызовы

Используя асинхронный обратный вызов в .NET (ссылка) , вы можете с гораздо большим количеством контроля отправлять данные в и из ваших файлов JavaScript;

Вы можете выполнять методы на стороне сервера, вызывая определенную функцию javascript, которую вы зарегистрировали на начальной странице:

void Page_Load(object sender, EventArgs e)
{
    ClientScriptManager cm = Page.ClientScript;
    String cbReference = cm.GetCallbackEventReference(this, "arg","ReceiveServerData", "");
    String callbackScript = "function CallServer(arg, context) {" + cbReference + "; }";
    cm.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);
}

Это связано с реализацией интерфейса ICallbackEventHandler, предоставляющего вам два метода:а именно:

RaiseCallbackEvent: Событие, которое вызывается при отправке данных из вашего клиента javascript и содержит переменную аргумента.(С помощью JSON эта единственная переменная переменная легко преодолевается.)

GetCallbackResult: По завершении метода на стороне сервера вы можете отправить результат в виде строки, содержащей все, что вы можетеТребуется вернуться на вашу страницу.

Это очень подходит для длительных процессов, возвращающих подтверждение или проверяющих простые условия перед полной обратной публикацией, и значительно улучшит удобство использования.

Объединение этих двух методоввозможно и найти медиану между отправкой серверных элементов управления назад (сетки, выпадающие списки и т. д.) и проверкой определенных условий (на стороне сервера) без повторной отправки только для того, чтобы обнаружить, что некоторые условия не были выполнены.

3 голосов
/ 30 марта 2012

Нет способа полностью избежать JavaScript.Вы можете использовать что-то вроде UpdatePanel, поэтому вам не нужно писать код самостоятельно, но JavaScript все еще используется за кулисами.

ASP.NET в целом не может функционировать без JavaScript,потому что, кроме кнопок, любой другой элемент управления выполняет обратную передачу, использует функцию JavaScript __doPostBack.

постбэк делает это

РЕДАКТИРОВАТЬ

Самый гармоничный способ отрегулировать ваш серверный контроль, вероятно, заключить его в оболочкуUpdatePanel:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <!-- your server control here -->
    </ContentTemplate>
</asp:UpdatePanel>
1 голос
/ 30 марта 2012

Если вы ищете быстрый способ внедрения функции «без перезагрузки», без написания какого-либо пользовательского JavaScript, вы можете взглянуть на ASP UpdatePanel http://ajax.net -tutorials.com / controls / updatepanel-control/

Он прост в настройке и обрабатывает «все» для вас.:)

...