我有一个购物车,我正在开发作为Web用户控件。 ucCart.ascx将出现在三个不同的页面上,我希望购物车的功能可以根据它出现的页面而改变。例如,当客户确认订单时,我不希望删除购物车项目按钮或重新计算购物车按钮。
这可以在代码后面以编程方式完成吗?我宁愿不使用JavaScript。我天真地尝试使用cartDelete.Visible = false;
,但这根本不受欢迎!
答案 0 :(得分:8)
您需要获取对这些控件的引用,并将set Visible属性调用为false;像这个伪代码;
ShoppingCartControlVariable.FinControl( “idOfTheControlYouWantToHide”)可见=假。
添加示例代码以演示如何完成此操作:
假设您有这样的转发器(请注意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;
}
}
它会产生这个:
作为参考,我用来填充转发器的代码是:
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();
答案 1 :(得分:0)
我认为你可以在这个名为“hide controls”的用户控件中创建一个公共函数,并在你想要的页面中调用这个函数,这个函数隐藏控件,或者你可以在用户控件中创建一个布尔属性,页面可以将其设置为false,然后您可以使用此标志来隐藏usercontrol中的控件。