![](/img/trans.png)
[英]Web forms prevent Page_Load event in control when inside placeholder that visible false
[英]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()之前加載控件?
我想這里的問題是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.