我已经完全掌握了Web用户控件以及在父ASPX中更改<div>
的可见性。
我有一个位于用户控件内的购物车,其中一个页面包含UC,状态为<div>
,显示购物车内容的摘要。如果购物车为空,则会显示不同的<div>
。
UC中的代码
if (varCartStatus)
{
cartStatusTrue.Visible = true;
cartStatusFalse.Visible = false;
else
{
cartStatusTrue.Visible = false;
cartStatusFalse.Visible = true;
}
目前我得到的只是 'cartStatusTrue'在当前上下文中不存在。 “cartStatusFalse”在当前上下文中不存在。
如何让UC更改父ASPX中<div>
的可见性?
抱歉,我对.net和C#很新,而且我完全迷失了(再次!)
答案 0 :(得分:6)
由于页面中存在控件,而不是控件,因此您必须在页面中找到它们:
this.Page.FindControl("cartStatusTrue").Visible = varCartStatus;
this.Page.FindControl("cartStatusFalse").Visible = !varCartStatus;
或类似地,如果他们在父控件中:
this.Parent.FindControl("cartStatusTrue").Visible = varCartStatus;
this.Parent.FindControl("cartStatusFalse").Visible = !varCartStatus;
当然,还要确保您的div都有runat="server"
和ID="cartStatusTrue"
或ID="cartStatusFalse"
。
编辑:另一个可能是设计改进的选项是将隐藏div的工作移到aspx页面。您可以将varCartStatus
公开为控件的属性,并从aspx页面读取该属性。在你的aspx.cs中:
this.cartStatusTrue.Visible = this.CartControl.CartStatus;
this.cartStatusFalse.Visible = !this.CartControl.CartStatus;
答案 1 :(得分:1)
您可以使用以下内容:
this.Parent.FindControl("cartStatusTrue").Visible = true;
this.Parent.FindControl("cartStatusFalse").Visible = false;
这是因为,“div”存在于此用户控件的“Parent”(即Page)中。
希望这会有所帮助!!
答案 2 :(得分:1)
嗨正如gilly3所说,它应该没问题。如果您希望生成div而不显示div,也可以使用Attributes.Add(“style”,“visibility:hiddden”)。
答案 3 :(得分:0)
由于这里有两种可能性:
你不应该在你所在的页面上做类似的事情。我的建议是将你的购物车控制分成两个控件 - 一个用于渲染购物车,另一个用于显示状态信息。然后,您的包含页面使用两个控件,按照它们认为合适的方式放置它们,并与它们交互,但它需要消耗事件,初始化它们等。
答案 4 :(得分:0)
一种方法是通过公共属性公开控件,或在页面上创建一个公共方法,以便您获取&amp;设置可见性值。然后用户控件将需要一种方法来操纵暴露的字段。
在页面代码文件中添加以下方法
public void CartStatusTrueVisible(bool Visible)
{
cartStatusTrue.Visible = Visible;
}
public void CartStatusFalseVisible(bool Visible)
{
cartStatusFalse.Visible = Visible;
}
在控制代码文件中添加这些方法
public void CartStatusTrueVisible(bool Visible)
{
((_Default)Page).CartStatusTrueVisible(Visible);
}
public void CartStatusFalseVisible(bool Visible)
{
((_Default)Page).CartStatusFalseVisible(Visible);
}