![](/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.