Динамическое изменение картинок

Gosend
Дата: 29.04.2007 18:01:38
Здравствуйте, программисты.
Есть задача - нужно написать такой контрол, что бы на странице появлялась картинка, при нажатии на неё она должна меняться на другую и т.д. циклически не перегружая страницу.

В общем я это реализовал с помощью JavsScript, но не тут то было - при добавлении двух таких контролов, оно уже не работает, потому как используются одинаковые переменные: текущий индекс отображаемой картинки и количество картинок всего.
Думал Аджакс использовать, но тут та же проблема, я на сервере не смогу отличить от какого контрола пришёл запрос на следующий УРЛ картинки.
В разных контролах может быть разные картинки и их количество.

Как можно решить эту задачу?
Спасибо.
Think of an idea to change our world - and put it into action.
epicenter
Дата: 29.04.2007 18:05:49
автор
я на сервере не смогу отличить от какого контрола пришёл запрос на следующий УРЛ

почему?
Gosend
Дата: 29.04.2007 19:57:49
ну у меня нет идей как отличить по запросу от какого контрола пришел запрос...
Контрол - я имею ввиду это не стандартный, а самописный, он состоит из нескольких стандартных.
Think of an idea to change our world - and put it into action.
iConst
Дата: 29.04.2007 22:08:08
Для этого лучше наследоваться от System.Web.UI.WebControls.WebControl с реализацией интерфейса INamingContainer - это гарантирует уникальность идентификаторов (имен) дочерних контролов.
Контрол должен реализовать javascript, с проверкой регистрации и подстановкой уникальных имен.

Типа:

string imageLoadScriptKey = "rolloverImageBuildingCode" + this.ClientID;

string script = @"
%3c%21--
" + this.ClientID + "_img_out = new Image(); " +
this.ClientID + @"_img_out.src = """ + this.ImageUrl + @""";
" + this.ClientID + "_img_over = new Image(); " +
this.ClientID + @"_img_over.src = """ + this.RollOverImageUrl + @""";
// --%3e
";

Page.RegisterClientScriptBlock(imageLoadScriptKey, script);


если на странице размещается несколько однотипных контролов и достаточен один клиент-скрипт то нужно осуществить проверку (чтоб не плодить скрипты)

if(!this.IsClientScriptBlockRegistered("imageLoadScriptKey"))
{
...
}
Перевернув мир - оглянись, может перевернулся ты сам?!
iConst
Дата: 29.04.2007 22:23:19
В догонку - редактор gotdotnet сожрал некоторые теги - открывающий и закрывающий script language="javascript" и т.п., но суть, думаю понятна.
Перевернув мир - оглянись, может перевернулся ты сам?!
Gosend
Дата: 29.04.2007 22:32:43
спасибо за пояснения, попутный вопрос: как можно в Web Control Library вставить клиентский скрипт в контрол?
Т.е. как сделать контрол, что бы он шел с клиентским скриптом вместе?

спасибо.
Think of an idea to change our world - and put it into action.
Gosend
Дата: 29.04.2007 22:34:33
И я в принципе реализовал контрол через INamingContainer, но не додумался как это можно использовать при обращении.
Think of an idea to change our world - and put it into action.
iConst
Дата: 29.04.2007 22:43:46
Gosend:
спасибо за пояснения, попутный вопрос: как можно в Web Control Library вставить клиентский скрипт в контрол?
Т.е. как сделать контрол, что бы он шел с клиентским скриптом вместе?

спасибо.


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

Перевернув мир - оглянись, может перевернулся ты сам?!
Gosend
Дата: 01.05.2007 18:58:17
Не, я имею ввиду как фактически вставить на страницу клиентский скрипт через создыннй контрол (Web Control Library)
Неужели "Response.Write("<script type=\"text/jacascript\"> and so on...");" ?
Может есть более разумный способ?

спасибо.
Think of an idea to change our world - and put it into action.
Gosend
Дата: 01.05.2007 19:56:45
Большое спасибо iConst, я разобрался.
Think of an idea to change our world - and put it into action.