2009-05-18 6 views
2

ここには私が書いたコードがあります。私が持っている問題は: グリッドビューの "rowcommand"ボタンをクリックすると、うまく動作するarraylistに項目が追加されます。 ユーザーがボタンをクリックすると、ページが再び読み込まれ、「行コマンド」に戻ります。結果として同じ値がarraylistに追加されます。pageload in c#

これはポストバックに関するものですか?それは私がそれを十分に理解しているとは思わない!ここで何が間違っているようですか?

//編集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

古典的な悪いwebformsコードで、そのコードには多くの失敗があります。セッションやWebフォームの代わりにパラメータを渡すことの代替案を検討することをお勧めします –

答えて

1

は、まあ、私はそれのための答えを見つけて、それは簡単でした。 ButtonType = "Button"のときに問題になるようです。

問題を解決するには、ButtonTypeを「リンク」に変更します。

あなたの興味があれば私を助けたリンクがあります。

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

ユーザーがもう一度ボタンページが読み込まをクリックすると、再び "rowcommand" になった後!

問題は表示されません。ユーザーがボタンをクリックしたため、イベントが処理されました。あなたは何をすると思いましたか?

は、すべてが戻って—を投稿し、すべてのイベントが—が戻ってポストを引き起こした可能性のあるイベントに加えて、ページのloadイベントを含め、ページ全体のライフサイクルを実行している意味バック完全なポストを強制することを忘れないでください。さらに、ポストバックごとにクラスの新しいインスタンスを使用して作業しています。


最初のボタンをクリックすると、ページがリダイレクトされ、別の場所に移動することが予想されますか?

+0

私も、問題が何であるかはっきりしません。 –

+0

@Joelボタンを最初にクリックしてページを読み込むと、「rowcommand」に記載されているページに飛びます。 2回目の読み込み後、上記のページに移動します。 したがって、値はarraylistに2回追加されます。私は欲しいものではありません。 – pier

2

これは、想定していることです。最初にページロードイベントが処理され、次に行コマンドイベントが処理されます。

あなたが見ていることは、2つのイベントが順番に処理されていることです。

また、チェックアウトコールバック対ポストバック。

ジョエルさんのように、ポストバックはあなたのページを無効にして再構築します。コールバックはJavascript/AJAX __doPostBack()を使用し、ページ全体、コールバックコンポーネントまたはコンテナのみを無効にしません。ページロードイベントは引き続き呼び出されますが、IsCallbackプロパティをテストできます。

このリンクを助けるかもしれない... http://msdn.microsoft.com/en-us/library/ms178141.aspx