Есть много способов вызова методов ASP.NET (вызов WebService или статический Page метод). Но в этом посте речь подет об интерфейсе IPostBackEventHandler
Вот что говорит MSDN об IPostBackEventHandler — «Определяет метод, который должен быть реализован ASP.NET серверными элементами управления для обработки событий обратной передачи.», не буду тут сильно разжевывать теорию. Обработчик, без проверки входящих параметров, может например выглядеть так:
public virtual void RaisePostBackEvent(string eventArgument)
{
string[] argArr = eventArgument.Split('$');
string[] argArr2 = null;
if(argArr.Length>1) {
argArr2 = new string[argArr.Length-1];
Array.Copy(argArr, 1, argArr2, 0, argArr2.Length);
}
HandlePostBackEvent(argArr[0], argArr2);
}
protected virtual void HandlePostBackEvent(string request, params string[] args)
{
log.Debug(request + ": " + args);
}
Теперь посмотрим, как это можно использовать в унаследованном классе:
protected override void HandlePostBackEvent(string request, params string[] args)
{
if (request == "ShowVersionDetail")
{
int id = 0;
Int32.TryParse(args[0], out id);
SetResult("ShowVersionDetailLink", new SystemVersionDetailResultContext(matrixSystem.ID, id));
}
}
В этом проекте использовался ResultMapping от Spring.NET. Но это не тема для этой статьи.
И так, у нас есть обработчик событий, который разбирает агрументы на запрос и аргументы. Теперь, его нужно вызвать из JavaScript. Для этого нам нужно вызвать метод вида: javascript:__doPostBack(‘[control.ClientID|»__Page»]‘,’[передаваемые параметры]‘);
Форматтер для YUI может выглядеть примерно так:
YAHOO.project.formatPostback = function(elCell, oRecord, oColumn, oData) {
if(!oColumn.postback) alert("formatPostback - postback is missing");
var str = oColumn.postback.str?oColumn.postback.str:"{0}";
var key = oColumn.postback.key?oColumn.postback.key:oColumn.name;
var ctl = oColumn.postback.control?oColumn.postback.control:'__Page';
elCell.innerHTML =
''+oData+"";
}
Бывает так, что метод __doPostBack отсутствует на странице. Это из за того что Script Manager не инициализирован на странице. Самый простой способ его инициализировать, для этого на странице должен быть как минимум один контрол с autopostback=true. Можно просто добавить на страницу контол:
Метки:ASP.NET
Похожие статьи
- 22 августа 2008 -- Собственная страница для обработки ошибок на ASP.NET (0)
- 27 ноября 2009 -- ASP.NET пейджинг. (Paging in ASP.NET) (3)
- 4 августа 2008 -- ASP.NET trace как один из инструментов отладки. (0)
- 27 августа 2008 -- Кеширование ASP.NET страниц браузером. (2)
- 30 декабря 2008 -- Создаем ASHX хендлер в ASP.NET (1)