如何检查内容页面中是否单击了母版页注销按钮

时间:2011-08-01 07:24:43

标签: c# asp.net master-pages

我有一个要求,我需要检查用户是否单击主页面中的注销按钮并跳过内容页面中的方法。因为该方法有 Response.End ,这会导致响应停在那个方法。因此,用户无法注销该应用程序。

我感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

我认为解决问题的一个非常简单的解决方案是当用户点击退出按钮时,您将其重定向到一个注销页面,该页面处理页面加载中的注销并再次重定向到主页。

答案 1 :(得分:1)

假设您的注销按钮是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;
}