управлять видимостью изображения в повторителе на основе переменной сеанса - PullRequest
0 голосов
/ 03 ноября 2011

Мне сложно понять, как управлять видимостью изображения в виде сетки на основе переменной сеанса.

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

Я попытался использовать Visible='<%# mySessionVariable %>', но получил сообщение о том, что mySessionVariable был недоступен. Я думаю, это потому, что он находится в сетке, потому что я использую эту переменную в коде для другой части страницы вне сетки, без каких-либо проблем.

РЕДАКТИРОВАТЬ: Я только что понял это в 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 ]

1 голос
/ 03 ноября 2011

<%# - тег сервера ASP DataBinding.Что происходит, когда вы меняете <%# на <%=?

Если это не сработает, я бы предложил настроить видимость столбца в событии 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);
    }
}
0 голосов
/ 04 ноября 2011

Я получил это на работу. Спасибо за помощь всем. На этой странице я нашел пример, который помог.

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;
                }
            }
        }
    }
0 голосов
/ 03 ноября 2011

Попробуйте это:

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