ASP.NET: страница отображается без изменений даже после изменения - PullRequest
1 голос
/ 24 ноября 2011

У меня есть страница, которая содержит сгенерированный контент.

Page.aspx:

<asp:DropDownList ID="cmbUsers" runat="server" AutoPostBack="True" 
    oninit="cmbUsers_Init">
</asp:DropDownList>
<asp:Panel ID="pnlRights" runat="server">

Page.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    string [] roles = Roles.GetAllRoles();
    string sel_user = ... ; // get the user name selected by combo

    foreach (string role in roles)
    {
        CheckBox chk = new CheckBox();
        chk.Text = role;
        chk.Checked = Roles.IsUserInRole(sel_user, role);
        pnlRights.Controls.Add(chk);

    }
}
protected void cmbUsers_Init(object sender, EventArgs e)
{
            ... // fill the combo with user list

    if (!IsPostBack)
    {
        {
            cmbUsers.SelectedValue = // the current signed username;
        }
    }
}

При первой загрузке страница корректна - все флажки установлены так, как и должно быть (проверены роли, в которых находится пользователь). Проблема возникает, когда вы меняете пользователя в комбо. После изменения вызывается обратный вызов, все флажки снова устанавливаются правильно (видел в отладчике), НО браузер показывает флажки, установленные для предыдущего пользователя. Я не подозреваю ошибку браузера (пробовал в IE, Maxthon, Mozilla), но некоторые настройки я забыл установить. Это что-то с кешированием? Не могли бы вы дать мне подсказку, пожалуйста?

1 Ответ

1 голос
/ 24 ноября 2011

Ваша перестройка страницы в свежем состоянии каждый постбэк.Проверьте свойство IsPostBack объекта Page, чтобы убедиться, что вы инициализируете страницу только один раз.

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        string [] roles = Roles.GetAllRoles();
        string sel_user = ... ; // get the user name selected by combo

        foreach (string role in roles)
        {
            CheckBox chk = new CheckBox();
            chk.Text = role;
            chk.Checked = Roles.IsUserInRole(sel_user, role);
            pnlRights.Controls.Add(chk);

        }
    }
}

Редактировать - Если вы снова посмотрите на ваш пример, это не будет работать точно, у вас должна быть кнопкаили что-то, что генерирует обратную передачу, и выполняйте свою логику ответа там, а не в page_load.Вот почему вы видите такое поведение.

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