загрузка страницы в c #

2

Вот фрагмент кода, который я написал. Проблема, с которой я сталкиваюсь: Когда я нажимаю кнопку в gridview, команда rowcommand добавляет элемент в arraylist, который отлично работает. После того, как пользователь нажмет кнопку, страница снова загрузится, и она перейдет в "rowcommand" AGAIN! В результате такое же значение добавляется к arraylist.

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

//edit 2: весь блок кода

public partial class Action_k : System.Web.UI.Page
{
    ArrayList array;
    ArrayList tmpArrayList = new ArrayList();
    string itemIDs = string.Empty;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            if (Session["username"] == null)
            {
                Session["anonuser"] = "anon";

                Label1.Text = "";
                userLabel.Text = "";
                ImageButton1.ImageUrl = "~/images/logink.gif";
                ImageButton1.PostBackUrl = "~/Login_k.aspx";
            }
            else
            {
                userLabel.Text = Session["username"].ToString();
                Label1.Text = "Your logged in as: ";
                ImageButton1.ImageUrl = "~/images/logoutk.gif";
            }

            if (Session["array"] == null)
            {
                array = new ArrayList();
                Session.Add("array", array);
            }

        }
        array = Session["array"] as ArrayList;
    }

    public void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "AddToCart")
        {
            int index = Convert.ToInt32(e.CommandArgument);
            string items = GridView2.DataKeys[index].Value.ToString();
            array.Add(items);
            Response.Redirect("ShoppingCart_k.aspx?itemID=" + items);
        }

    }
}

Спасибо,

  • 0
    В этом коде много ошибок, классический плохой код веб-форм. Я действительно рекомендую вам изучить альтернативы передаче параметров через сессию и альтернативы веб-формам.
Теги:

3 ответа

1
Лучший ответ

Ну, я нашел для него ответ, и это было просто. Кажется, это проблема, когда ButtonType = "Button".

Проблема может быть решена путем изменения ButtonType на "Link".

Просто положите, если ваша заинтересованная здесь ссылка, которая помогла мне.

http://forums.asp.net/p/1002747/1324414.aspx#1324414
2

Он делает то, что он предполагает. Сначала обрабатывается событие загрузки страницы, затем обрабатывается событие Row Command.

Что вы видите, так это то, что два события обрабатываются один за другим.

Также проверьте обратные вызовы и обратные вызовы.

Как сказал Джоэл, Postback собирается аннулировать и перестроить вашу страницу. Обратный вызов использует Javascript/AJAX __doPostBack() и не делает недействительной всю страницу, просто ваш компонент обратного вызова или контейнер. Событие загрузки страницы все еще называется, но вы можете проверить свойство IsCallback.

Эта ссылка может помочь... http://msdn.microsoft.com/en-us/library/ms178141.aspx

0

После того, как пользователь нажмет кнопку, страница снова загрузится, и она перейдет в "rowcommand" AGAIN!

Я не вижу проблемы. Пользователь нажал кнопку, чтобы обработать событие. Что вы ожидали от этого?

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


Итак, при первом нажатии кнопки вы ожидаете, что страница будет перенаправлена ​​и в конечном итоге окажется где-то в другом месте?

  • 0
    Мне тоже неясно, в чем именно заключается проблема.
  • 0
    @Joel, он пропускает переход на страницу, упомянутую в "rowcommand", когда кнопка нажимается в первый раз, и загружает страницу. После второй загрузки он переходит на указанную страницу. Поэтому значение добавляется дважды в массив. Который не я хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню