2011-08-03 31 views
1

我有一個購物車,我正在開發作爲一個Web用戶控件。 ucCart.ascx將出現在三個不同的頁面上,我希望購物車的功能根據顯示的頁面而改變。例如,當客戶確認他們的訂單時,我不想看到刪除購物車項目按鈕或重新計算購物車按鈕。如何切換中繼器中控件的可見性?

這能在代碼編程方式落後?我寧願不使用JavaScript。我天真地試圖使用cartDelete.Visible = false;,但這根本不受歡迎!

+1

您是否試圖隱藏用戶控件或用戶控件中的按鈕? –

+0

用戶控件內的中繼器內的按鈕。 – ComfortablyNumb

回答

6

你需要去這些控件的引用,並調用設置Visible屬性爲false;像這樣的僞代碼;

ShoppingCartControlVariable.FinControl( 「idOfTheControlYouWantToHide」)可見=假。

See this documentation

添加示例代碼來演示如何做到這一點:

假設你有一個這樣的中繼器(注意OnItemCreated處理程序):

<asp:Repeater ID="myrepeater" runat="server" OnItemCreated="myrepeater_ItemCreated"> 
     <HeaderTemplate> 
      <table> 
       <thead> 
        <th> 
         Link 
        </th> 
        <th> 
         Button 
        </th> 
       </thead> 
       <tbody> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <td> 
        <asp:HyperLink ID="link" runat="server" Text='<%#Eval("Text")%>' NavigateUrl='<%#Eval("Url")%>'></asp:HyperLink> 
       </td> 
       <td> 
        <asp:Button ID="btnDelete" runat="server" Text="Delete" /> 
       </td> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      </tbody> </table> 
     </FooterTemplate> 
    </asp:Repeater> 

您可以隱藏/在轉發器的行顯示內容如下:

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item && (boolean_condition_that_on_which_you_will_decide_what_to_show_and_what_to_hide)) 
    { 
     e.Item.FindControl("link").Visible = false; 
    } 
} 

例如,如果我想隱藏在每一行的所有鏈接元素和剛剛離開的刪除按鈕,我可以這樣做:

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem) 
    { 
     e.Item.FindControl("btnDelete").Visible = false; 
    } 
} 

同時會產生這樣的: sample run

僅供參考,我用來填充我的中繼器的代碼是這樣的:

List<CartItem> items = new List<CartItem>(); 
     for (int i = 0; i < 10; i++) 
     { 
      CartItem t = new CartItem(); 
      t.Text="Item " +i; 
      t.Url="http://www."+i+".com"; 
      items.Add(t); 
     } 
     myrepeater.DataSource = items; 
     myrepeater.DataBind(); 
+0

這很好地在中繼器外面工作(對於'確認'按鈕),但不在中繼器內。 – ComfortablyNumb

+0

@ComfortablyNumb然後你需要做的是處理OnItemCreated事件。我會在一分鐘後發佈一個示例項目。 – Icarus

0

我覺得你可以做一個名爲「隱藏控制」這個用戶控件內公共職能,並呼籲在你想要的頁面,這個功能該功能隱藏控件,也可以在用戶控件和頁面進行布爾屬性可以將其設置爲false,然後您可以使用此標誌來隱藏您的用戶控件中的控件。