Блокировка доступа к странице в методе Page_Load - PullRequest
0 голосов
/ 08 февраля 2010

У меня есть страница, которая выполняет некоторые проверки в методе Page_Load

Согласно этой проверке мне нужно заблокировать доступ к этой странице.

Пример:

protected void Page_Load(object sender, EventArgs e){
if (!IsPostBack)
{
    if (MyValidation)
    {
    // The page is loaded an de user get access
    }
    else
    {
    // Here, i need to block the access to this page
    // Redirect, close browser, etc ...
    }
} }

на самом деле, есть этот код ...

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // The page is loaded an de user get access
            Services.ChatService ws = new ChatService();
            KeyValuePair<int, string> kvp = ws.AtenderClienteChat();
            if (kvp.Key > 0)
            {
                this.CodigoChamadoChat = CriaChamado(kvp.Key, kvp.Value);
                odsChamado.SelectParameters["cd_chamado"].DefaultValue = this.CodigoChamadoChat.ToString();
                fvChamadoChat.DataBind();

                // recupero da aplication a lista que contém os chat em andamento
                Application.Lock();
                List<chat_andamento> lstChatAndamento = (List<chat_andamento>)Application["ListChatAndamento"];

                // Instancio e inicializo uma nova chat_andamento
                chat_andamento ca = new chat_andamento(this.CodigoChamadoChat, kvp.Key, kvp.Value, WebUtil.GetUserId());
                lstChatAndamento.Add(ca);

                // Devolvo para a Application a lista preenchida
                Application["ListChatAndamento"] = lstChatAndamento;
                Application.UnLock();

                // Altero o titulo da pagina para facilitar localização do tecnico quando estiver com mais de um chat em andamento
                chamado c = (chamado)fvChamadoChat.DataItem;
                Page.Title = kvp.Value + " (" + c.cliente.nomecomercial_cliente + ")";


                // Envia uma mensagem de boas vindas
                Services.ChatService sw = new ChatService();
                sw.SendMessage(this.CodigoChamadoChat, "Olá " + kvp.Value + ", em que posso ajudar?", 2);

                //RetrieveMessages();  
                ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "RetMessTec", "timer_onTick();", true);
            }
            else
            {
    // Here, i need to block the access to this page
    // Redirect, close browser, etc ...
                // aqui é preciso abortar o carregamento da pagina
                // talvez mostrar um DIV sobre toda a pagina inpedindo interação do usuário
                  ScriptManager.RegisterClientScriptBlock(this.Page, typeof(Page), "CliAtendido", "self.close();", true);
                 //this.divGeral.Visible = false;
                 //this.divErro.Visible = true;    
            }
        }
    }

и этот код выдаёт мне эту ошибку

Ошибка сервера в приложении '/'.

Ссылка на объект не установлена ​​на экземпляр объекта. Описание: Необработанное исключение произошло во время выполнение текущей сети запрос. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и откуда он возник в коде.

Сведения об исключении: System.NullReferenceException: объект ссылка не установлена ​​на экземпляр объект.

Ошибка источника:

Строка 173: функция EncerrarChamado () {Строка 174:
// Primeiramente Mostra O Combo Para выделите до линии Line 175: вар divMotivo = $ ('# <% = fvChamadoChat.FindControl ( "divMotivo"). ClientID %> '); Строка 176: если (divMotivo.hasClass ('Hidden')) {Линия 177
divMotivo.removeClass ( 'скрытый');

Исходный файл: C: \ Projetos \ Avalon \ Avalon \ View \ Forms \ frmChatTecnico.aspx Линия: 175

В строке 175 есть несколько операторов JQuery. которые получают div внутри FormView

ВОПРОС 1 ЕСТЬ: Как заблокировать доступ (перенаправление, закрытие браузера и т. Д.), Если проверка переходит к части «Остальное» моей проверки

ВОПРОС 2: Если моя проверка переходит к «Иначе», FormView не создается, и если он не создан, то javascript не может получить к нему доступ.

Есть идеи?

Ответы [ 5 ]

0 голосов
/ 08 февраля 2010

Проблема в том, что я пытаюсь получить доступ к элементу управления, который еще не отображается.

Чтобы решить эту проблему, я делаю следующие модификации в моем коде:

В JS объявите переменные, которые мне нужны, просто так:

    $(document).ready(function() {
    var divMotivo;
    var ddlMotivo;
    var btnFinalizaChat;
});

Внутри моего FormView я поместил некоторый скрипт, чтобы инициализировать эти переменные, поэтому переменные инициализируются, только если визуализируется FormView

                    <asp:FormView ID="fvChamadoChat" runat="server" DataSourceID="odsChamado" DataKeyNames="cd_chamado"
                    Width="100%">
                    <ItemTemplate> // A lot of things ... divs, tables, etc

                        <script type="text/javascript">
                            divMotivo = $('#<%= fvChamadoChat.FindControl("divMotivo").ClientID %>');
                            ddlMotivo = $('#<%= fvChamadoChat.FindControl("ddlMotivo").ClientID %>');
                            btnFinalizaChat = $('#<%= fvChamadoChat.FindControl("btnFinalizaChat").ClientID %>');
                        </script>

                    </ItemTemplate>
                </asp:FormView>

Вот и все

0 голосов
/ 08 февраля 2010

При переходе к «Остальное» просто покажите пользователю сообщение для того же и гиперссылку для перенаправления на другую страницу.

0 голосов
/ 08 февраля 2010
  1. Я бы лично переопределил использование FormsAuthentication.RedirectToLogin () [или как там это называется]

  2. Я думаю, если вы выдадите возврат; Команда после перенаправления остальное не имеет значения, так как сервер отправит перенаправление, которое перенаправит браузер.

0 голосов
/ 08 февраля 2010

Response.Redirect ( "Error.aspx");

Разве это не сработает?

0 голосов
/ 08 февраля 2010

Вы добавили ScriptManager на свою страницу?

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