2012-02-15 50 views
0

我目前正在開發一個web應用程序並創建一些自定義控件。我創建了一個自定義的「模式按鈕」,它繼承自Web控件和INamingContainer,控件使用emebedded資源註冊客戶端代碼(FancyBox jQuery),模式按鈕在模式中顯示Iframe,並且可以正常工作Default.aspx頁面。用jquery自定義控件,接下來要做什麼?

問題:

我都試過,不過模式彈出未能回發聲明另一個頁面上的其他「模式按鈕」控件。我研究了這個錯誤,發現_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功能當它被重新發布時也會再次打開。因此

在此先感謝

回答

0

原來的回傳被強制頁面重新但沒有這是不存儲在我的自定義控件的視圖狀態ModalViewID產生ChildControls,產生「小馬」的jQuery!爲了解決它,我添加了一個簡單的檢查我的創建子控件方法返回如果modalviewid == null或空,我也可以分配我的modalViewID視圖狀態。

謝謝無語何言

相關問題