基于会话变量控制中继器图像可见性

本文关键字:控制 中继器 图像 可见性 变量 于会话 会话 | 更新日期: 2023-09-27 18:13:16

我在计算如何根据会话变量控制gridview中图像的可见性时遇到了麻烦。

<asp:Image runat="server" ID="imgImportedData" Width="20px" Height="20px" ImageUrl="~/images/warning.png" CausesValidation="false"   />

我尝试使用Visible='<%# mySessionVariable %>',但我得到一条消息说mySessionVariable不可用。我认为这是因为它在网格中,因为我在gridview之外的另一部分页面后面的代码中使用了这个变量,没有任何问题。

编辑:我只是在Repeater控制中意识到这一点,而不是GridView

我尝试了这两种方法,仍然得到The name 'MySession' does not exist in the current context

Visible='<%# (bool)MySession.IsImportedData == "true" ? true : false %>' 
Visible='<%# MySession.IsImportedData == "true" ? true : false %>' 

基于会话变量控制中继器图像可见性

<%#是一个DataBinding ASP服务器标记。将<%#更改为<%=会发生什么?

如果这不起作用,我建议在RowDataBound事件中设置列的可见性,如下所示:

MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Image imgImportedData = (Image) e.Row.FindControl("imgImportedData");
        // Assuming that mySessionVariable isn't already a bool, which it really should be.
        imgImportedData.Visible = bool.Parse(mySessionVariable);
    }
}

试试这个:

<asp:Image runat="server" ID="imgImportedData" 
    Visible='<%# Session["mySessionVariable"] == "foo" ? true : false %>' /> 

我让这个工作。谢谢大家的帮助。我在本页找到了一个有帮助的例子。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

 protected void rptAlternateNames_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            if (e.Item.DataItem != null)
            {
                Image imageImportedData = ((Image)e.Item.FindControl("imgImportedData"));
                if (MySession.IsImportedData)
                {
                    imageImportedData.Visible = true;
                }
            }
        }
    }