2016-05-06 1 views
2

こんにちは。なぜdropdownlistがリロード時にアイテムを再度追加するのですか?(asp.net c#)

今、2日間私を迷惑にさせるエラーがあります。

「BMW」のロゴをクリックしたときに読み込まれるページがあります。 ページがドロップダウンリスト(「モデル」と呼ばれます)を読み込むと、特定のリストから値が取得されます。

ここでは、ページ(F5)をリフレッシュするたびに、「model.item.clear();」を追加してもアイテムが複数回追加されるという問題があります。方法。

ですので、ページを再読み込みしても項目を一度追加したいと思っています(F5)

NewTransaction.aspxが、これはドロップダウンリストのコード「BMWロゴ」

<a href="NewTransaction.aspx?type=Car&company=BMW"><img class="logo" style="width:200px" src="images/BMW.png" /></a> 

これを持っている別のページからコードされているドロップダウンリスト(「モデル」)を持っているページ、 です

ここでは、 "Car"のオブジェクトを持つリストからデータを入力する部分です。このコードは"をPage_Load" 方法

switch (Server.UrlDecode(Request["company"]).ToString()) 
     { 

      case "BMW": 
       model.Items.Clear(); 
        foreach (Car n in OverLand.car) 
        { 
         if (n.made == "BMW") 
         { 
          model.Items.Add(n.model); 
         } 
        } 


       break; 

picture of the outputであることを ノート。

他の企業にとっては、他の多くの「ケース」があることに注意してください。

ありがとうございました。

編集:私は、次の

switch (Server.UrlDecode(Request["company"]).ToString()) 
     { 
      case "BMW": 

       if (!IsPostBack) 
       { 
        foreach (Car n in OverLand.car) 
        { 
         if (n.made == "BMW") 
         { 
          model.Items.Add(n.model); 
         } 
        } 
       }   

       break; 

を試してみましたが、その後、私はグーグルクロームでウェブサイトを実行し、それが働いていたが、その後、私はそれを停止し、再びそれを再実行して、ドロップダウンリストは、5回のような項目を追加しました。 ここで何が起こっているのか分かりません。

EDIT 2は:ので、私は、最初の時間が今まですべてが正常に動作していることに気づいたと私はページのGoogleのクロムをリロードしようとすると、私にこのメッセージを置く何:i.imgur.com/EVjLxGD.pngを。

しかし、プロジェクトを閉じてもう一度開くと、データを複数回追加します(ページを何回更新したか+モデルリストからモデルを何回選択するかと同じだと思います)。私はIISからサイトを停止しなければならないのを防ぎますが、他のすべてがうまく動作しているかどうかを確認する方法です。何点チェックする方法を除いて、モデル私は自分のデータベースにBMWを持っていて、そのカウンタを変数に入れ、 "if"条件に別の条件を設定します。これは、モデルをリストに追加して、dropdownlist.Items.Count> Counterそれでももっと良い解決策を探しています。

+0

これはタイプミスか、 'model.Items.Clear();'を使用する必要がありますか? – nelek

+1

ドロップダウンリストの人口を以下に入れてください:if(!IsPostBack){} – Zaki

+0

それはちょうどタイプミスでした、私は今編集しました。 –

答えて

0

F5キーを押すか、ブラウザをリフレッシュすると、前回の要求が繰り返されます。したがって、最初にページを訪問して(ポストバックではなく)F5を押すと、F5が生成したリクエストもPostBackにはなりません。しかし、ポストバックではなくページにアクセスしてボタンをクリックすると(ポストバックが発生し、クリックイベントが発生する)、F5キーを押すとPostBackになり、同じクリックイベントが発生します。

IsPostBackがtrueかどうかを変更することはできません。リストをリロードする必要があるかどうかを知るために、あるいは単に.Clear()してリロードする必要があるかどうかを知るために、別の方法を工夫する必要があります。

+0

「ポストバック」の仕組みを説明していただきありがとうございます。初めて初めてすべてがうまく動作し、ページをリロードしようとすると、このメッセージが私に送られます:http://i.imgur.com/ EVjLxGD.png。 –

+0

しかし、私がプロジェクトを閉じてもう一度開くと、データが複数回追加されます(モデルリストからモデルを選択した回数+ページの更新回数と等しいと思います)。 –

+0

私はIISからサイトを停止する必要がありますが、もちろん、他のものがうまく動作しているかどうかを確認する方法ですが、いくつかのモデルを確認する方法を除いて、私のデータベースにBMWが入っていて、そのカウンタを変数に入れ、 "if"条件に別の条件を設定します。私はドロップダウンリスト.Items.Count> Counterの後に追加をやめるためにモデルをリストに追加するために使用します。それでももっと良い解決策を探しています –

0

私はそれを理解しようと3日間過ごしたと信じられません。問題は実際には "IIS Express"(Visual Studioに関するローカルホストのもの)です。 私が2回目の編集で述べたように、ウェブサイトを初めて実行するとすべて正常に動作します。

ただし、デバッグを停止して再実行すると、項目が複数回追加されます。

友人のノートパソコンの1つで同じコードを試してみましたが、完全に機能しました。 。

私が気づいたのは、彼がデバッグをやめたときに彼の "IIS"が自動的に閉じる(アイコンがタスクバーの中で消えてしまう)のですが、私にとっては "IIS"アイコンから手動でウェブサイトを停止する必要がありますタスクバー。

私は重複したデータについての説明が必要です(IISはこのような場合にサイトのホスティングをやめません)。また、デバッグを停止するとIISを停止する方法が必要です(Visual Studio 2015コミュニティ版)。

ありがとうございます。

関連する問題