繁体   English   中英

Visible ='<%#UserCanEdit%>'–如果在Page_Load中设置为true,则控件不可见

[英]Visible='<%# UserCanEdit %>' – if set to true inside Page_Load, then control isn't visible


用户控件定义了一个名为UserCanEdit的属性:

private bool _userCanEdit=false;
public bool UserCanEdit
{
    get { return _userCanEdit; }
    set { _userCanEdit = value; }
}


此用户控件还包含以下GridView

    <asp:GridView ID="GridView1" runat="server">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="C" runat="server" Visible='<%# UserCanEdit %>' Text="Visibility"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>


为了使控件C可见,需要将UserCanEdit设置为true 如果将其设置在Page_Init()中 ,则C确实可见。 但是,如果我在Page_Load()中设置它,那么C是不可见的:

protected void Page_Load(object sender, EventArgs e)
{
    this.UserCanEdit = (this.Page.User.Identity.IsAuthenticated &&
       (this.Page.User.IsInRole("Administrators") ||
        this.Page.User.IsInRole("Editors")));

    GridView1.DataBind();
}


那么,如果在Page_Load()中设置UserCanEdit,为什么C不可见? 据我所知,仅当调用GridView.DataBind()时才会计算单值绑定表达式<%#%> ,这是在UserCanEdit设置为true吗?


干杯

我的猜测是,因为尚未定义UserCanEdit的值就已定义了控件。 是否在页面初始化步骤的Page_Load()之前加载控件?

http://msdn.microsoft.com/en-us/library/ms178472.aspx

我想这里的问题是UserCanEdit不是您的gridview数据源的一部分。 如何基于不属于您来源的媒体资源进行绑定。 我猜您正在尝试做的是要基于某些用户凭据隐藏列。 可能的解决方法是用户OnRowDataBound事件。 在该事件用户内部,像这样

if(条件)

((Label)e.Row.FindControl("C")).visible = true;

其他

((Label)e.Row.FindControl("C")).visible = false;

现在,您可以在实际的Page_Load(您的网页)事件中设置此条件。

注意:条件是与您的UserCanEdit相似的强制性公共属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM