c# - LinkBut​​ton OnCommand 或 OnClick 未触发

标签 c# asp.net sitecore sitecore6 isapi-rewrite

我正在尝试做一些看起来相当简单的事情。我有一个带有多个 LinkBut​​tons 的用户控件。每个 LinkBut​​ton 都有 OnCommandCommandNameCommandArgument 集,如下所示:

<ul id="continents">
    <li id="northamerica"><asp:LinkButton ID="lbNorthAmerica" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="North America" runat="server">North America</asp:LinkButton></li>
    <li id="southamerica"><asp:LinkButton ID="lbSouthAmerica" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="South America" runat="server">South America</asp:LinkButton></li>
    <li id="asia"><asp:LinkButton ID="lbAsia" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="Asia" runat="server">Asia</asp:LinkButton></li>
    <li id="australia"><asp:LinkButton ID="Australia" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="Australia" runat="server">Australia</asp:LinkButton></li>
    <li id="africa"><asp:LinkButton ID="lbAfrica" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="Africa" runat="server">Africa</asp:LinkButton></li>
    <li id="europe"><asp:LinkButton ID="lbEurope" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="Europe" runat="server">Europe</asp:LinkButton></li>
</ul>

就其值(value)而言,用户控件具有 AutoEventWireup="true"

在代码隐藏中,我有这个:

    protected void ChooseRegion(object sender, CommandEventArgs e)
    {
        Response.Cookies["region"].Value = e.CommandArgument.ToString();
        Response.Cookies["region"].Expires = DateTime.Now.AddDays(90);
        SendToRegion(e.CommandArgument.ToString());
    }

在我的生产环境 (Windows Server 2008) 中,当我点击链接按钮时,ChooseRegion() 没有被调用,因此没有设置 cookie。我不知道为什么。我已尝试在 OnInit 中手动配置命令处理程序,并尝试使用 OnClick 而不是 OnCommand。我尝试在 LinkBut​​tons 上设置 EnableViewState="true"。到目前为止,我所做的一切都没有奏效。

但是,这在我的开发机器 (Windows 7) 上运行良好。

在这一点上,我相当确定这两个环境之间可能存在一些配置差异导致了这种情况,但我真的不确定从哪里开始寻找。想法?

编辑 - 2011-10-26:

好的 - 我发现我在其他地方也遇到了这个问题。具有上述代码的网站和我遇到问题的其他网站都是共享同一个 Sitecore 实例的 Sitecore 解决方案。

在另一个站点上,有一个用于电子邮件地址的文本框和一个带有 OnClick 事件的关联 ImageButton。这一切都在一个控件中,该控件包含在站点的每个页面上。在主页上,OnClick 处理程序从不触发。在任何其他页面上,OnClick 处理程序都会触发。

我上面帖子的原始部分中的代码也在网站的主页上。如果我将它移到任何其他页面,它会按预期工作。

此外,就像我帖子原始部分中的代码一样,它在我的开发机器 (Windows 7) 上运行良好,但在生产机器 (Windows 2008 Server) 上运行良好。因此,这似乎与位于主页上有关,而且 Sitecore 可能以某种方式参与了该问题。不过,我还在摸不着头脑……

最佳答案

啊哈!通过我上面添加的一些信息思考之后,我意识到问题是什么,在弄清楚我的开发环境和生产机器之间的区别是生产机器安装了 ISAPI_Rewrite 和我不知道的一整套重写规则之后'有。

其中一个将对/default.aspx 的请求重写为/... 所以当我单击 LinkBut​​ton 时,服务器拦截了 POST 请求并向/发出了 301 重定向,然后浏览器使用 GET 获取/请求 - 因此 POST 负载从未进入我的 ASP.NET 代码。

RewriteCond METHOD GET 添加到有问题的规则中解决了问题。

现在我可以让头发重新长出来了!

关于c# - LinkBut​​ton OnCommand 或 OnClick 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835431/

相关文章:

c# - 跟踪、识别和报告应用程序引发的每个 'error message' 的有效方法是什么?

c# - 管理 Nhibernate 关系表的更好方法

c# - Sitecore 发布 :end event interaction with user

c# - 为委托(delegate)类型生成的 CIL 代码是编译时还是运行时?

c# - 对 asp.net mvc 版本号的澄清

asp.net - 如何使用我的网络 API 来提高我网站的 Alexa 排名?

c# - 以指数格式显示的数据

asp.net-mvc - Sitecore 中的渲染和子布局有什么区别

indexing - 建立索引后,Sitecore 文档字段为空

C# 自定义窗体在退出时抛出 COMException