Вызов функции JavaScript из кода C # в пользовательском элементе управления - PullRequest
3 голосов
/ 08 сентября 2011

В настоящее время я вызываю свои функции JavaScript, используя:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);

Работает отлично! Даже используя главную страницу и панель обновления, она работает как положено.

Однако, когда я пытаюсь сделать то же самое в пользовательском элементе управления, встроенном в страницу, вызываемую с помощью jQuery Thickbox, это не работает!

Кто-нибудь знает, как решить эту проблему?

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

Это решило проблему:

ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);

Как было упомянуто @Joel, возникла проблема с типом, который я использовал в качестве параметра для функции.

Примечание. Если вы используете толстый ящик, возможно, вы не используете главную страницу на странице, содержащей пользовательский элемент управления. Следовательно, на jQuery также необходимо ссылаться на этой странице, так как главная страница не принимает участие в Thickbox.

2 голосов
/ 08 сентября 2011

Мне кажется, что то, что у вас есть, несовместимо с типами.Когда вы включаете это в настоящую страницу, эта часть кода: (this, typeof(Page),... работает, потому что вы имеете дело со страницей.Как только вы поместите его в UserControl, вы больше не будете иметь дело со страницей.

Вы можете попробовать добавить открытое свойство в свой пользовательский элемент управления:

public System.Web.Page ParentForm { get; set; }

На страницевключает в себя элемент управления, включающий этот код в событие Page_InitComplete или Page_Load:

myUserControl.ParentForm = this;

Затем вы можете изменить свой оператор scriptmanager следующим образом:

ScriptManager.RegisterClientScriptBlock(ParentForm, typeof(Page), Guid.NewGuid().ToString(), "$(function(){$.jGrowl('Hello World');});", true);
0 голосов
/ 08 сентября 2011

Вы гарантировали, что ваш пользовательский элемент управления вызывает databind ()?Я уже сталкивался с подобной проблемой.

...