Пользовательский контроль с помощью jquery, что делать дальше? - PullRequest
0 голосов
/ 16 февраля 2012

В настоящее время я разрабатываю веб-приложение и создаю несколько пользовательских элементов управления.Я создал пользовательскую «модальную кнопку», которая наследуется от веб-элемента управления и, и INamingContainer, элемент управления использует emebedded ресурсы для регистрации клиентского кода (FancyBox jQuery), модальная кнопка отображает Iframe в модальном режиме и отлично работает на моемСтраница Default.aspx.

Проблема:

Я попытался объявить другой элемент управления «модальная кнопка» на другой странице, однако всплывающее окно не может выполнить обратную передачу.Я исследовал ошибку и обнаружил, что _DoPostBack не генерируется на этой странице.поэтому я добавил метод: this.Page.ClientScript.GetPostBackClientHyperlink (this, "") ;.Это сгенерировало функцию _doPostBack и вызвало пост обратно, однако модал не открывается во второй раз!

Вот мой сценарий на стороне клиента, сгенерированный в моем методе управления, переопределяющем CreateChildControls ():

      // http://fancybox.net/
            StringBuilder jQueryInclude = new StringBuilder();
            jQueryInclude.Append("$(document).ready(function () { ");

            // Uses ".class" selector 
            jQueryInclude.AppendFormat("$('.{0}').fancybox( ", this.ModalViewID);
            jQueryInclude.Append(" { ");
            jQueryInclude.Append("    'titlePosition': 'outside',");
            jQueryInclude.Append("     'modal': 'true', ");
            jQueryInclude.Append("     'transitionIn': 'elastic', ");
            jQueryInclude.Append("     'transitionOut': 'fade', ");
            jQueryInclude.Append(" }); ");
            jQueryInclude.Append("});");

            var closeMethod = String.Format("{0}_CloseDialog()", close.ClientID);

            jQueryInclude.Append(" function METHOD_NAME { ").Replace("METHOD_NAME", closeMethod);
            jQueryInclude.Append("    $.fancybox.close(); ");
            jQueryInclude.AppendFormat(" __doPostBack('<%= {0}  %>', '' )", close.ClientID); // Postback on close to reload iframe
            jQueryInclude.Append("   } ");

            close.OnClientClick = closeMethod;
//user preference else all modals will be same 
            Page.ClientScript.RegisterClientScriptBlock(typeof(ModalButton),  String.Format("{0}_fancyBox", this.ModalViewID), jQueryInclude.ToString(), true);

Что мне нужно знать:

Как обеспечить этот пользовательский "modalbutton "генерирует функцию _DoPostBack и также открывается снова, когда она была отправлена ​​обратно.

Заранее спасибо

1 Ответ

0 голосов
/ 17 февраля 2012

Оказывается, что постбэк заставлял страницу снова генерировать ChildControls, но без ModalViewID, который не был сохранен в Viewstate моего пользовательского элемента управления, поэтому генерировал jquery "пони"! Чтобы исправить это, я добавил простую проверку моего метода создания дочерних элементов управления, чтобы он возвращал, если modalviewid == null или пустой, я также мог назначить свой modalViewID для viewstate.

Спасибо в любом случае

...