asp:按钮重新加载页面,而不是在Sitecore中触发OnClick事件

时间:2015-01-12 11:14:46

标签: html asp.net sitecore

我正在使用Sitecore,我有一个标题子布局,我在所有页面中使用。此布局包含一个Logout按钮,用于在单击时触发OnClick事件并执行onclick事件功能。但是在几页中它根本不会触发OnClick事件,而是重新加载页面。

以下是退出按钮的代码

<asp:button id="btnLogout" runat="server" borderstyle="None" onclick="btnLogout_Click" text="Log out" ToolTip="Log out" backcolor="Transparent" style="cursor:pointer" class="logout_new"></asp:button>

以下是事件功能的代码

protected void btnLogout_Click(object sender, EventArgs e)
{              
   Sitecore.Security.Authentication.AuthenticationManager.Logout();
   Response.Redirect("/Login.aspx");
}

我发现注销触发onclick事件的页面和它所执行的页面之间的区别在于它们使用包含注销按钮的相同头部子布局但是它们使用不同的内容子布局。

注意:我没有将Cache应用于任何子布局。

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:2)

从给定的上下文中我不知道问题是什么,但如果我有这样的问题,我会做的就是这样。

正如你在几页上说的那样,它不起作用,可能是该特定页面上的其他控件导致了这个问题。

我将选择两个页面,它们对表示层的控制较少。说PageA是一个工作页面,PageB是一个非工作页面。然后我比较PageA和PageB并删除所有常用控件,这应该缩小表示层上控件的数量。现在再次检查以查看Page B是否正常工作。如果没有,我将尝试在PageB上一次删除一个控件,直到它开始工作。如果您发现通过删除某些控件并且页面开始工作,那么您可以查看特定控件并确定问题。

我希望这会有所帮助。

答案 1 :(得分:0)

尝试禁用缓存,因为它会返回html而不会触发后端代码。 为此,一个选项是转到这些页面的演示详细信息,找到控件并单击它进行编辑。在“缓存部分”下,取消选中“可缓存”并发布该项目。如果这可以解决您的问题,我会查看模板的标准值,将更改应用于具有相同模板的所有项目

答案 2 :(得分:0)

这种行为在烦人的时候也发生在我身上,但它几乎总是一样的:代码所在的Sitecore子布局正在被缓存。

onclick javascript会触发,但页面不会使用新内容重新呈现,因为“未单击”版本存储在缓存中。

您需要在子布局上禁用缓存才能使按钮正常工作。

但是,如果您尝试尽可能多地缓存演示文稿内容,这可能会有点烦人。在这些情况下,通常意味着您需要反直觉地创建一些“子子布局”并静态放置它们。将包含的子布局设置为未缓存,然后您可以适当地设置每个较小的缓存(缓存静态部分,而不是缓存动态内容)。

答案 3 :(得分:0)

问题出在内容子布局中,它没有工作,Page_Load函数正在调用Response.Redirect函数给它自己,并且在此之前它没有检查它是否是回发请求。因此,每当用户点击退出按钮时,它就会将其发布回服务器并且页面用于重新加载而不是执行onclick事件。

我注意到在其工作的其他内容子布局中,它正在检查它是否是回传。

我之前添加了一个if(!IsPostBack),它开始工作。

相关问题