基于会话变量控制中继器图像可见性
本文关键字:控制 中继器 图像 可见性 变量 于会话 会话 | 更新日期: 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;
}
}
}
}