LinkButton OnCommand или OnClick не работают - PullRequest
3 голосов
/ 20 октября 2011

Я пытаюсь сделать что-то, что кажется довольно простым.У меня есть пользовательский элемент управления с несколькими 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>

Для чего стоит пользовательский элемент управления имеет AutoEventWireup="true".

Inкод у меня такой:

    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.Я попытался установить EnableViewState="true" на LinkButtons.Ничто из того, что я пробовал до сих пор, не сработало.

Тем не менее, это прекрасно работает на моей машине для разработки (Windows 7).

В этот момент я совершенно уверен, что, возможно, существует некоторое различие в конфигурациимежду двумя средами, которые вызывают это, но я действительно не уверен, где начать искать.Идеи?

Edit - 2011-10-26:

ОК - Я обнаружил, что у меня есть эта проблема и в других местах.Сайт с вышеуказанным кодом и другой сайт, на котором у меня возникла проблема, являются решениями Sitecore, использующими один и тот же экземпляр Sitecore.

На другом сайте есть текстовое поле для адреса электронной почты и связанного с ним ImageButton.с событием OnClick.Это все в элементе управления, который включен на каждой странице сайта.На домашней странице обработчик OnClick никогда не срабатывает.На любой другой странице запускается обработчик OnClick.

Код в оригинальной части моего поста выше также находится на главной странице сайта.Если я переместу его на любую другую страницу, он будет работать как положено.

Кроме того, как и код в оригинальной части моего поста, он отлично работает на моей машине для разработки (Windows 7), но не на рабочих машинах(Windows 2008 Server).Таким образом, может показаться, что это как-то связано с тем, что вы находитесь на домашней странице, и, возможно, Sitecore как-то вовлечен в проблему.Я все еще чешу голову, хотя ...

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Aha! Подумав над информацией, которую я добавил выше, я понял, в чем проблема, выяснив, что разница между моей средой разработки и рабочими машинами заключается в том, что на производственных машинах установлен ISAPI_Rewrite и целый набор правил перезаписи, которые я использую. нет.

Один из них переписывает запросы в /default.aspx в / ... поэтому, когда я нажимал на LinkButton, сервер перехватил запрос POST и выдал перенаправление 301 в /, а затем браузер получил / с GET запрос - таким образом, полезная нагрузка POST никогда не доходила до моего кода ASP.NET.

Добавление RewriteCond METHOD GET к рассматриваемому правилу решило проблему.

Теперь я могу позволить снова отрастить мои волосы!

1 голос
/ 23 октября 2011

Все ваши кнопки ссылок должны иметь обработчик для 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
    }
  }
1 голос
/ 23 октября 2011

Почему бы вам не добавить некоторые функции регистрации ошибок, которые отправляют ошибки в текстовый файл? тогда вы можете вручную проверить, если на сервере код, который вы используете, выдает какие-либо ошибки ?? Я не могу найти на глаз какую-либо ошибку в вашем коде, но некоторые дополнительные возможности могут быть ... Я, однако, использую метод записи ошибок в такие моменты, как это больше, чем в другие времена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...