母版页上的LinkBut​​ton不会在ASP.NET中的第二个子页面上触发

时间:2016-02-05 17:35:03

标签: javascript c# asp.net

我正在ASP.NET(Framework 4.0)中创建项目。我在Master Page&amp ;;中使用了Asp LinkBut​​ton。它有2页链接(Home.aspx& service.aspx)。

问题如下: LinkBut​​ton1适用于Home.aspx,不适用于service.aspx

User.master代码如下

<ul class="nav navbar-nav navbar-right">
    <li>
        <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click" AutoPostBack="true">Signout  
            <i class="glyphicon glyphicon-off"></i>
        </asp:LinkButton>
    </li>
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
            <span>
                <asp:Label ID="lblName" runat="server" Text=""></asp:Label>
            </span>
            <i class="icon-user fa"></i>
            <i class=" icon-down-open-big fa"></i>
        </a>
        <ul class="dropdown-menu user-menu">
            <li class="active">
                <a href="frmUserHome.aspx">
                    <i class="icon-home"></i> My Account 
                </a>
            </li>
            <li >
                <a href="frmUserHome.aspx">
                    <i class="icon-home"></i> Personal Home 
                </a>
            </li>
            <li>
                <a href="#">
                    <i class="icon-hourglass"></i> Pending approval 
                </a>
            </li>
        </ul>
    </li>
</ul>

LinkBut​​ton1的User.master.cs代码单击

protected void LinkButton1_Click(object sender, EventArgs e)
    {

         if (Request.Cookies["ASP.NET_SessionId"] != null)
         {
             Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
             Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);
         }
         FormsAuthentication.SignOut();
         Session.Abandon();
         Response.Redirect("~/Default.aspx");
    }

在Home.aspx页面上检查元素(使用Chrome浏览器)时,我发现下面的代码

<li>
    <a id="ctl00_LinkButton1" autopostback="true" href="javascript:__doPostBack('ctl00$LinkButton1','')">Signout  
        <i class="glyphicon glyphicon-off"></i>
    </a>
</li>

和service.aspx(Chrome浏览器检查元素)

<li>
    <a id="ctl00_LinkButton1" autopostback="true" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$LinkButton1", "", true, "", "", false, true))'>Signout  
        <i class="glyphicon glyphicon-off"></i>
    </a>
</li>

为什么他们的Home.aspx&amp; service.aspx(通过chrome浏览器检查元素)?

1 个答案:

答案 0 :(得分:0)

感谢原创Answer作家&amp;感谢@Nimesh提供链接。

设置LinkBut​​ton服务器控件的PostBackUrl属性,然后意味着它是跨页面发布,然后asp.net框架而不是普通的__DoPostBack()添加&#34; WebForm_DoPostBackWithOptions&#34;。

我根据我的代码要求进行了一些更改。

LinkBut​​ton1(User.master)页面的代码

    <li>
    <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click"  PostBackUrl="~/Default.aspx">Signout 
        <i class="glyphicon glyphicon-off"></i>
    </asp:LinkButton>
    </li>

如果在你的情况下你没有设置&#34; PostBackUrl&#34;,那么ASP.NET框架也默认不为Button Control添加它,所以这意味着必须有另一个控件设置OnClick属性值可能使用以下服务器端代码。

User.master.cs的代码

protected void LinkButton1_Click(object sender, EventArgs e)
    {

         if (Request.Cookies["ASP.NET_SessionId"] != null)
         {
             Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
             Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);
         }
         FormsAuthentication.SignOut();
         Session.Abandon();
         PostBackOptions myPostBackOptions = new PostBackOptions(this);
         myPostBackOptions.ActionUrl = "~/Default.aspx";
         myPostBackOptions.AutoPostBack = false;
         myPostBackOptions.RequiresJavaScriptProtocol = true;
         myPostBackOptions.PerformValidation = true;

         // Add the client-side script to the HyperLink1 control.
         LinkButton1.OnClientClick = Page.ClientScript.GetPostBackEventReference(myPostBackOptions);
         Response.Redirect("~/Default.aspx");
    }