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

时间:2009-08-27 19:11:57

标签: c# .net asp.net data-binding gridview


用户控件定义名为 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()时才会评估单值绑定表达式&lt;%#%&gt; ,这发生在之后UserCanEdit 设置为 true ?!


欢呼声

2 个答案:

答案 0 :(得分:2)

我的猜测是因为在您拥有UserCanEdit值之前正在定义控件。是否在页面初始化步骤中的Page_Load()之前加载控件?

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

答案 1 :(得分:1)

我想这里的问题是UserCanEdit不是gridview的数据源。如何根据不属于您的来源的财产进行绑定。我想你想要做的是你想根据一些用户凭证隐藏一列。可能的问题是用户OnRowDataBound事件。在那个事件用户里面就是这样的

如果(条件)

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

否则

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

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

注意:条件是与您的UserCanEdit类似的公共财产