【问题标题】:.NET webform Hide a HTML td column in backend server (Update Panel, Content Template).NET webform 在后端服务器中隐藏 HTML td 列(更新面板、内容模板)
【发布时间】:2017-04-20 21:30:32
【问题描述】:

我有一个实例,它显示了一个 listView。

listview在更新面板中,它需要响应每个数据源绑定,并通过检查一个Session来显示/隐藏listView表中的一列。

我不能简单地添加

<% if((int)Session["v1"] ==1) { %> <td>Hi</td> <%}%>

当 存在时会抛出异常,表示更新面板无法更新。

(但它适用于更新面板之外的控件)

我想我可以通过 javascript 来完成,但我只是想确定后端是否有更智能的方法。

class='<%# HiddenClass %>'

并在加载期间更改此参数(如果应显示列,请将 HiddenClass 更改为空字符串。

它适用于项目的列(在 ItemTemplate 中),但它不适用于项目的标题列 LayoutTemplate(我认为这是因为仅数据源绑定重新渲染了 ItemTemplate 中的字段并且不包括 LayoutTemplate

目前,如果对于列表视图的每个数据源绑定,我能够隐藏它以将 runat="server" Visible 设置为 false。但是当我需要隐藏更多列时看起来很复杂(需要创建更多ID并且asp.net无法按类设置字段可见)。

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    PlaceHolder 包装&lt;td&gt;&lt;/td&gt; 并在后面的代码中设置它的Visibility 属性。

    <asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
        <td>Hi</td>
    </asp:PlaceHolder>
    

    然后在后面的代码中

    if ((int)Session["v1"] == 1)
    {
        PlaceHolder1.Visible = true;
    }
    

    【讨论】:

    • 嗨,这样做与我设置 ID 和 runat="server" 到 相同......它们都会抛出异常,因为未加载布局模板(当有如果数据源中没有记录,ListView 将加载其空模板而不是 LayoutTemplate,因此无论占位符或 也会在数据绑定期间抛出异常
    • 我刚刚发现异常可以避免,是我的错误。但问题是即使通过使用占位符,我仍然需要创建两个占位符(因为我需要隐藏两个 html td 并且它们的位置没有粘在一起。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签