簡體   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