2011-07-02 15 views
0

我有我的博客網站(WIP),我還沒有找到解決方案這個奇怪的問題。我有一箇中繼器,它從一個名爲dsGetArticlesObjectDataSourceID獲取SQL數據庫中的所有文章。改變我的控制狀態與其他ObjectDataSourceID綁定中繼器後

我想要做的是當有人點擊一篇文章時,我將ObjectDataSourceID更改爲dsGetArticle。到目前爲止這麼好,一切正常,我看到1篇文章,而不是所有的文章。

現在我檢查用戶是否登錄後,我想添加/刪除編輯功能,所以如果用戶沒有登錄,顯然他不允許更改文章或評論。

因此,當頁面加載並且用戶未登錄時,我將面板設置爲不可見編輯功能。這可以起作用,但只要他點擊文章(不是回發),編輯功能就會再次可見儘管它通過後面的代碼並使面板不可見。

只有當我更改ObjectDataSourceID並將其數據綁定時,纔會出現此問題。

這是我對這個代碼隱藏:使用Linkbutton以及,所以我可以回傳做 (標準面板是可見的)

if (!IsPostBack) 
     { 
      if (Request.QueryString["articleID"] != null) 
      { 
       repArticles.DataSourceID = "dsGetArticle"; 
      } 
      else 
      { 
       repArticles.DataSourceID = "dsGetArticles"; 
      } 
      repArticles.DataBind(); 
     } 
     if (!User.Identity.IsAuthenticated) 
     { 
      foreach (RepeaterItem ri in repArticles.Items) 
      { 
       Panel pnlArticleFunctions = ri.FindControl("pnlArticleFunctions") as Panel; 
       pnlArticleFunctions.Visible = false; 
      } 
     } 

我都試過,但我得到了相同的結果,沒有面板是無形的:

protected void lbLink_Click(object sender, EventArgs e) 
    { 
     repArticles.DataSourceID = "dsGetArticle"; 
     repArticles.DataBind(); 
     foreach (RepeaterItem ri in repArticles.Items) 
     { 
      Panel pnlTest = ri.FindControl("pnlTest") as Panel; 
      pnlTest.Visible = false; 
     } 
     //doesnt become invisible 
    } 
+0

在什麼情況下你有'if(!IsPostBack){}'部分? onInit,onLoad,onPreRender? – ub1k

回答

0
從您放置在第二個代碼塊,你肯定

拋開了if(!User.Identity.IsAuthenticated)部分不在if(!IsPostBack)塊?因爲從你說的看起來好像IsAuthenticated部分只有在不回發時才被執行。

+0

首先,對於任何發生「沒有回傳」的事情,你必須要有一些客戶端邏輯,我們當然不會談論它。您認爲正在運行的代碼很可能並未實際發生。在foreach循環中放置一個斷點並檢查應用程序是否會輸入它。還請檢查:http://msdn.microsoft.com/en-us/library/ms178472.aspx – ub1k

+0

我已檢查循環,他去了,運行代碼,找到控件,並把可見= false.Controls保持可見....只有當我將ObjectDataSourceID更改爲別的東西時,如果我將它重新綁定到相同的源,它工作。但這不是我想要的OFC。 – Nick

相關問題