【问题标题】:Setting aspx table's visibility to true fails将 aspx 表的可见性设置为 true 失败
【发布时间】:2011-12-05 18:29:09
【问题描述】:

我对此感到困惑。我有一个包含 3 个表格的网络表单。我想根据某些条件显示/隐藏它们。除了在一种情况下,一切都很好。

这就是我所拥有的:

<asp:UpdatePanel ID="upGeneral" runat="server" >
    <ContentTemplate>

        <table id="tab1" runat="server" visible="true" width="100%">
           ...
        </table>
        <table id="tab2" runat="server" visible="false" width="100%">
           ...
        </table>
        <table id="tab3" runat="server" visible="false" width="100%">
           ...
        </table>
    </ContentTemplate>
</asp:UpdatePanel>

然后,我在页面中添加了几个按钮,根据按下的按钮,我将更改表格的可见性。 我的问题是,在某些情况下,我将 tab3 的可见性更改为 true,将 tab1 和 tab2 的可见性更改为 false,虽然 tab1 的可见性设置为 false,但 tab3 的可见性不会设置为 true……叹息!

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        ...
        if (!editMode)
        {
            tab1.Visible = false;
            tab2.Visible = false;
            tab3.Visible = true;
        }
     }
}

在调试模式下,当我阅读这些说明时,tab3.visibile = true 不会改变 tab3 的属性! 你以前有过这种情况吗?你是怎么解决的?

非常感谢!

【问题讨论】:

  • 代码和概念看起来不错。您是否有可能拥有多个名为 tab3 的元素?
  • 没有。只有一个。这令人费解,因为它在我必须显示的按钮中运行良好。但是,在这种情况下,我想在页面加载时立即显示 tab3
  • 因此,当您第一次加载页面时,它肯定会命中该行但会产生错误的效果(即不显示表 3)。页面加载调用后是否有任何 css 或语句可能覆盖您正在调用的函数?
  • 我想知道操作按钮是否在更新面板内。如果它在其他更新面板中,您需要将其添加到触发器列表中

标签: c# asp.net


【解决方案1】:

问题可能出在更新面板上。

如果您尝试从更新面板外部更新内容,则需要在面板的回发元素中指定将更新面板的控件

<asp:PostBackTrigger ControlID="Button1" EventName="Click">

如果不指定触发器,那么更新面板将不会更新其中的属性。

【讨论】:

    【解决方案2】:

    嗯,您的问题可能出在此处:

     if (!Page.IsPostBack)
    

    这将导致if condition 内的statement 仅运行一次 - 当页面 首次加载。

    当发出回发(即您按下按钮)时,将不会到达此语句。

    尝试更改为

    if (Page.IsPostBack)
    

    【讨论】:

    • 他展示的代码只是为了给页面设置一个默认值,所以他只需要在第一次加载页面时运行一次。
    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 2015-12-22
    • 2020-04-19
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多