我最近从Sitecore 6.5升级到Sitecore 7.2。我已经处理了很多问题,重构了搜索等。但是,由于<asp:Button />
未定义,我在主页以外的页面__doPostback
未提交表单。为了解决这个问题,我在我的布局中添加了<asp:ScriptManager />
,现在javascript会在点击时触发,表单会被提交/重新加载。
我现在遇到的问题是我的服务器端点击事件处理程序没有针对该页面上的任何按钮触发。
以下是我的代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Login Page.ascx.cs"
Inherits="MyProject.layouts.Login.Login_Page" %>
<asp:Button ID="TestButton" runat="server" OnClick="TestButton_OnClick" />
我的代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyProject.layouts.Login
{
public partial class Login_Page : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void TestButton_OnClick(object sender, EventArgs e)
{
throw new Exception("Clicked");
}
}
}
点击该事件永远不会被触发。有什么想法吗?我认为这可能与页面没有__doPostback
定义的原因相同。
答案 0 :(得分:1)
如果您为子布局/渲染启用了缓存,那么这是预期的行为,因为渲染的HTML被缓存,并且在首次加载后不会触发您的服务器端代码。这意味着不会重新触发Page_Load事件,也不会重新触发按钮的Click事件。
最简单的检查方法是缓存问题是清除缓存(通过/sitecore/admin/cache.aspx)并查看您的事件是否被触发。您还可以通过设置cacheHtml="false"
来禁用元素中的缓存。这将帮助您识别缓存问题,您应该通过禁用该控件的缓存来解决潜在问题。