基于会话变量控制转发器中的图像可见性

时间:2011-11-03 18:43:41

标签: c# asp.net gridview session-variables

我无法确定如何根据会话变量控制网格视图中图像的可见性。

<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 %>' 

3 个答案:

答案 0 :(得分:1)

<%#是一个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);
    }
}

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

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;
                }
            }
        }
    }