如何使用c#从用户控件更改div可见性

时间:2011-09-08 16:02:32

标签: c# asp.net user-controls

我已经完全掌握了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#很新,而且我完全迷失了(再次!)

5 个答案:

答案 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)

由于这里有两种可能性:

  1. 您无法控制您在包含页面上的位置 和
  2. 您将来可以在其他网页上使用
  3. 你不应该在你所在的页面上做类似的事情。我的建议是将你的购物车控制分成两个控件 - 一个用于渲染购物车,另一个用于显示状态信息。然后,您的包含页面使用两个控件,按照它们认为合适的方式放置它们,并与它们交互,但它需要消耗事件,初始化它们等。

答案 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);
    }