我正在尝试做一些看起来相当简单的事情。我有一个带有多个 LinkButtons
的用户控件。每个 LinkButton
都有 OnCommand
、CommandName
和 CommandArgument
集,如下所示:
<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
。我尝试在 LinkButtons
上设置 EnableViewState="true"
。到目前为止,我所做的一切都没有奏效。
但是,这在我的开发机器 (Windows 7) 上运行良好。
在这一点上,我相当确定这两个环境之间可能存在一些配置差异导致了这种情况,但我真的不确定从哪里开始寻找。想法?
编辑 - 2011-10-26:
好的 - 我发现我在其他地方也遇到了这个问题。具有上述代码的网站和我遇到问题的其他网站都是共享同一个 Sitecore 实例的 Sitecore 解决方案。
在另一个站点上,有一个用于电子邮件地址的文本框和一个带有 OnClick 事件的关联 ImageButton。这一切都在一个控件中,该控件包含在站点的每个页面上。在主页上,OnClick 处理程序从不触发。在任何其他页面上,OnClick 处理程序都会触发。
我上面帖子的原始部分中的代码也在网站的主页上。如果我将它移到任何其他页面,它会按预期工作。
此外,就像我帖子原始部分中的代码一样,它在我的开发机器 (Windows 7) 上运行良好,但在生产机器 (Windows 2008 Server) 上运行良好。因此,这似乎与位于主页上有关,而且 Sitecore 可能以某种方式参与了该问题。不过,我还在摸不着头脑……
最佳答案
啊哈!通过我上面添加的一些信息思考之后,我意识到问题是什么,在弄清楚我的开发环境和生产机器之间的区别是生产机器安装了 ISAPI_Rewrite 和我不知道的一整套重写规则之后'有。
其中一个将对/default.aspx 的请求重写为/... 所以当我单击 LinkButton 时,服务器拦截了 POST 请求并向/发出了 301 重定向,然后浏览器使用 GET 获取/请求 - 因此 POST 负载从未进入我的 ASP.NET 代码。
将 RewriteCond METHOD GET
添加到有问题的规则中解决了问题。
现在我可以让头发重新长出来了!
关于c# - LinkButton OnCommand 或 OnClick 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835431/