Как проверить, нажата ли кнопка выхода из MasterPage на странице контента - PullRequest
1 голос
/ 01 августа 2011

У меня есть требование, в котором мне нужно проверить, нажимает ли пользователь кнопку выхода из системы на главной странице, и пропустить метод на странице содержимого. Поскольку этот метод имеет Response.End , что приводит к остановке ответа.в этом методе.Из-за этого пользователь не выходит из приложения.

Я ценю любую помощь.

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Я думаю, что одно из очень простых решений вашей проблемы - когда пользователь нажимает кнопку выхода из системы, вы перенаправляете его на страницу выхода, которая обрабатывает выход из системы при загрузке страницы и снова перенаправляет на домашнюю страницу.

1 голос
/ 01 августа 2011

Предполагая, что кнопка выхода из системы - это кнопка отправки html, вы можете проверить это, проверив данные банка запросов.Например,

if (null != Request.Form[YourButton.UniqueID])
{
   // YourButton is clicked
}

Вы можете добавить публичный метод на своей главной странице, чтобы выполнить такую ​​проверку и получить доступ к нему на своей странице.Например, в мастер-коде

public partial class YourMasterPage : System.Web.UI.MasterPage
{
   public bool IsLogoutClicked()
   {
     return null != Request.Form[LogoutButton.UniqueID];
   }

   ...
}

А затем на вашей странице содержимого

if (((YourMasterPage)this.Master).IsLogoutClicked())
{
    ...
}

В случае, если вы используете якорь или изображение для кнопки выхода из системы, тогда лучшим способом будетустановите скрытое поле с помощью js, а затем проверьте значение скрытого поля на странице.

РЕДАКТИРОВАТЬ : вот служебный метод, который проверяет данные запроса, чтобы определить, произошла ли обратная передача из-зана некоторый серверный элемент управления (независимо от типа элемента управления или независимо от свойства UseSubmitBehavior кнопки).

public const string POST_DATA_EVENT_TARGET = "__EVENTTARGET";
public const string POST_DATA_EVENT_ARGUMENT = "__EVENTARGUMENT";

/// <summary>
/// Returns wheather postback has happened due to the given control or not.
/// </summary>
public static bool IsPostBackDueToControl(Control control)
{
    var postData = HttpContext.Current.Request.Form;
    string postBackControlName = postData[POST_DATA_EVENT_TARGET];
    if (control.UniqueID == postBackControlName)
    {
        // This is control that has caused postback
        return true;
    }
    if (control is Button ||
        control is System.Web.UI.HtmlControls.HtmlInputButton)
    {
        // Check for button control, button name will be present in post data
        if (postData[control.UniqueID] != null)
        {
            return true;
        }
    }
    else if (control is ImageButton ||
        control is System.Web.UI.HtmlControls.HtmlInputImage)
    {
        // Check for image button, name.x & name.y are returned in post data
        if (postData[control.UniqueID + ".x"] != null)
        {
            return true;
        }
    }
    return false;
}
...