繁体   English   中英

LinkBut​​ton OnCommand或OnClick Not Firing

[英]LinkButton OnCommand or OnClick Not Firing

我正在尝试做一些看似相当简单的事情。 我有一个带有几个LinkButtons的用户LinkButtons 每个LinkButton都有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>

对于它的价值,用户控件具有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的请求重写为/ ...所以当我点击LinkBut​​ton时,服务器拦截了POST请求并发出301重定向到/,然后浏览器获取/带有GET请求 - 所以POST有效负载从未进入我的ASP.NET代码。

添加RewriteCond METHOD GET解决了问题。

现在我可以让我的头发再次长出来!

为什么不添加一些错误记录功能,将错误发送到文本文件? 那么你可以手动检查服务器上你使用的代码是否会抛出任何错误? 我不能在你的代码中发现任何错误,但是一些更多的经验可能......但是我使用记录错误的方法比其他时间更多。

您的所有链接按钮都应该具有OnClick的处理程序,如下所示:

<asp:LinkButton ID="lbAsia" OnClick="LinkButton_Click" OnCommand="ChooseRegion" CommandName="SetCookie" CommandArgument="Asia" runat="server">Asia</asp:LinkButton>

在代码背后你做了类似的事情:

  protected void LinkButton_Click(Object sender, EventArgs e) 
  {
     string commandArgument = (sender as LinkButton).CommandArgument;
     string commandName =(sender as LinkButton).CommandName;

    if(commandName == "something")
    {
        //Do something
       //and so on
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM