Visible = '<% # UserCanEdit%>' - если установлено значение true внутри Page_Load, то элемент управления не отображается - PullRequest
0 голосов
/ 27 августа 2009


Пользовательский элемент управления определяет свойство с именем 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();
}


Так почему же C не видно, если * Page42Load () установлено UserCanEdit ? Насколько я знаю, однозначное выражение привязки <% #%> вычисляется только при вызове GridView.DataBind () , что происходит после UserCanEdit установлено на true ?!


ура

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

Я предполагаю, что элементы управления определяются еще до того, как у вас есть значение для UserCanEdit. Не будут ли элементы управления загружены до Page_Load () на этапе инициализации страницы?

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

1 голос
/ 28 августа 2009

Полагаю, проблема в том, что UserCanEdit не является частью вашего источника данных для gridview. Как вы можете связать на основе собственности, которая не является частью вашего источника. Полагаю, вы пытаетесь скрыть столбец на основе учетных данных пользователя. Возможным решением будет пользовательское событие OnRowDataBound. И внутри этого события пользователь что-то вроде этого

если (условие)

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

еще

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

Теперь вы можете установить эту кодировку внутри фактического события Page_Load (Ваша веб-страница).

Примечание. Условие является фактически общедоступной собственностью, аналогичной вашей UserCanEdit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...