【问题标题】:asp:button reloads the page instead of firing OnClick event in Sitecoreasp:button 重新加载页面而不是在 Sitecore 中触发 OnClick 事件
【发布时间】:2015-01-12 11:14:46
【问题描述】:

我正在使用 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 事件的页面与不触发 onclick 事件的页面之间的区别在于它们使用包含注销按钮的相同标题子布局,但它们使用不同的内容子布局。

注意:我没有将缓存应用到任何子布局。

谁能帮我解决这个问题?

【问题讨论】:

  • 您的意思是子布局吗? (一个 ascx)您是否将缓存应用于子布局?
  • 是的,它是一个子布局。我没有将缓存应用到子布局
  • 你有绑定到按钮的 JavaScript 吗?也许在某些情况下,您在 JS 中有一个单击处理程序,它可能会返回 false,从而阻止回发。
  • @MarkUrsino 我发现问题出在无法正常工作的内容子布局中,Page_Load 函数正在向自身调用 Response.Redirect 函数并且它没有检查它是否是回发在此之前请求与否。我注意到在它工作的其他内容子布局中,它正在检查它是否不是回发。我在此之前添加了一个 if(!IsPostBack) 并开始工作。

标签: html asp.net sitecore


【解决方案1】:

根据给定的上下文,我不知道问题是什么,但如果我遇到这样的问题,我会这样做。

正如您仅在少数页面上所说的那样,它无法正常工作,可能是该特定页面上的其他控件导致了问题。

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

我希望这会有所帮助。

【讨论】:

  • 我接受了您的建议并进行了测试。问题出在它不起作用的内容子布局中,PageLoad 函数正在向其自身调用重定向函数,并且它没有像在它工作的子布局中那样检查它是否是在此之前回发请求。我在此之前添加了一个 if(!IsPostBack) 并开始工作。
【解决方案2】:

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

【讨论】:

  • @vincent 是的,它是一个子布局。如何禁用缓存?
  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 一个选项是转到这些页面的演示详细信息,找到控件并单击它进行编辑。在“缓存部分”下取消选中“可缓存”并发布项目。如果这解决了您的问题,我会查看模板的标准值,以将更改应用于具有相同模板的所有项目。
  • @askb,我已经重写了。现在好点了吗?
  • 您也可以加载您的页面,转到/sitecore/admin/showcache.aspx 并清除缓存。然后返回并单击您的按钮,如果它达到您的断点/工作,那么这是一个缓存问题。您也可以在&lt;site&gt; 节点上设置cacheHtml="false",但您知道,仅用于测试目的:)
【解决方案3】:

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

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

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

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

【讨论】:

  • 我发现缓存已经被禁用了。无论如何,我保存了它并重新发布。但它仍然无法正常工作。
【解决方案4】:

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

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

我在此之前添加了一个 if(!IsPostBack) 并开始工作。

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2022-01-10
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多