- Хроники. - -

Postback события ASP.NET из JavaScript

Posted By Ikutsin On 10 ноября 2009 @ 12:45 In .NET C#,HTML, AJAX, JS & CSS | Comments Disabled

Есть много способов вызова методов ASP.NET (вызов WebService или статический Page метод). Но в этом посте речь подет об интерфейсе IPostBackEventHandler

Вот что говорит MSDN об IPostBackEventHandler [1]«Определяет метод, который должен быть реализован 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+" [2]";
}

Бывает так, что метод __doPostBack отсутствует на странице. Это из за того что Script Manager не инициализирован на странице. Самый простой способ его инициализировать, для этого на странице должен быть как минимум один контрол с autopostback=true. Можно просто добавить на страницу контол:


Article printed from Хроники.:

URL to article: /1106-postback-sobytiya-asp-net-iz-javascript

URLs in this post:

[1] IPostBackEventHandler: http://msdn.microsoft.com/ru-ru/library/system.web.ui.ipostbackeventhandler.aspx

[2] '+oData+": '+

Copyright © 2008 Все, что меня окружает. All rights reserved.