Предотвратить запуск ItemCommand при обновлении - PullRequest
1 голос
/ 18 января 2012

У меня есть веб-элемент управления, который содержит повторитель с кнопкой, которая использует команду для добавления элементов во вложенный повторитель

control ->
  Rounds - [+] (add group) ->
    Groups

Насколько я могу судить, мне нужно использовать ItemCommand, поэтомуЯ могу передать аргумент раунда ID, к которому я добавлю группу, однако, когда я выполняю команду добавления и затем обновляю страницу, команда запускается снова.

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

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

Здеськод для события ItemCommand.

        protected void RoundsRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "AddGroup")
        {
            if (e.CommandArgument.ToString().AsID() > 0)
            {
                Control ctrl = e.Item.FindControl("RuleGroupListctrl");

                if (ctrl != null && ctrl is RuleGroupList)
                {
                    CompetitionRuleGroup grp = new CompetitionRuleGroup();

                    CompetitionRound currentRound = Rounds.FirstOrDefault(r => r.Round == e.CommandArgument.ToString().AsID());
                    grp.CompetitionID = currentRound.CompetitionID;
                    if (currentRound != null)
                        currentRound.CompetitionRuleGroups.Add(grp);
                }
            }
        }
    }

Буду признателен за любую помощь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Вы можете перенаправить на ту же страницу в конце вашего ItemCommand обработчика

Response.Redirect("YourPage.aspx");

Что называется Post-Redirect-Get (PRG) -Pattern.

http://www.andypemberton.com/engineering/the-post-redirect-get-pattern/

http://en.wikipedia.org/wiki/Post/Redirect/Get

0 голосов
/ 18 января 2012

2 предложения.

  1. Вы перевели свой веб-элемент управления в режим autopostback=false?
  2. почему бы не поместить все ваши page_load определения в

    if (!page.ispostback())
    

    ?

при этом пропускается page_load каждый раз, кроме первого page_load.

...