- Хроники. - -
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+": '+
Click here to print.
Copyright © 2008 Все, что меня окружает. All rights reserved.