2012-04-27 13 views
0

私のコードは以下の通りです:クライアントのjavascriptはジェネリックリストを作成してセッションに保存するwebserviceメソッドを呼び出します。古いセッションリストオブジェクトを停止するには

[WebMethod(EnableSession = true)] 
public void SaveUserSelection(string slctdRooms, string slctdcst) 
{ 
    List<SelectRms> SelectR = Session["someinfo"] as List<SelectRms>; 
    if (SelectR == null) 
    { 
     SelectR = new List<SelectRms>(); 
     Session["someinfo"] = SelectR; 

    } 

    SelectR.Add(new SelectRms { roomtype = slctdRooms, Roomcst = slctdcst }); 

} 

私は、この

リスト(SlctdRmWebSrv.SelectRms)SelctdRM =(一覧(SlctdRmWebSrv.SelectRms))Sessio [ "someinfoのような別のページのデータを表示するためにセッションをretreaveう"];

 if(SelctdRM != null) 


     { 

      repeater1.DataSource = SelctdRM; 

      repeater1.DataBind(); 
     } 

問題は、私は新しいリストを作成するには、セッションをretreaveたびに、新しいデータが古いものまで添加されていることです。私は現在のデータだけが表示される状況を作りたいです。私はリストをクリアしたり、セッションを放棄したり、リピータをクリアしてから新しいリセットを追加しようとしました。これを簡単に行うことができます。多くのありがとう

答えて

0

あなたのjavascriptからSaveUserSelectionを複数回呼び出すように聞こえます。そうであれば、リストが初期化されるのは初めてです。

したがって、リストはクリアされていないか、または再初期化されていないため、「古い」リストにアイテムを追加し続けます。

おそらくPage_Load上または単に/リストを初期化しクリアするために新しいWebMethodを作成するいずれかの)別の方法で初期化を置く必要があります。たとえば、これはあなたがPage_Loadイベントの上に置くことにした場合、それがどのように見えるかです:

:コードがノー

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    Session["someinfo"] = new List<SelectRms>(); 
} 

これは、あなたがWebMethodを作成した場合、それがどのように見えるかですテスト

[WebMethod(EnableSession = true)] 
public void InitUserSelection() 
{ 
    Session["someinfo"] = new List<SelectRms>(); 
} 

ユーザーの選択を追跡する準備ができたら、このメソッドを呼び出します。おそらく、あなたのフォームが最初に(ページの一番下のところ、このスクリプト)をロードするとき:

$(document).ready(function() { 
    $.ajax({ 
    type: "POST", 
    url: "PageName.aspx/InitUserSelection", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // After init you could use this method to do something else 
    } 
}); 
}); 

のでSaveUserSelectionは、次のようになります。

[WebMethod(EnableSession = true)] 
public void SaveUserSelection(string slctdRooms, string slctdcst) 
{ 
    List<SelectRms> SelectR = Session["someinfo"] as List<SelectRms>; 
    if (SelectR != null) 
    SelectR.Add(new SelectRms { roomtype = slctdRooms, Roomcst = slctdcst }); 
} 

そして、これはあなたのjavascriptはいつでもあなたの選択のように見える方法です変更:

$.ajax({ 
    type: "POST", 
    url: "PageName.aspx/SaveUserSelection", 
    data: "{'slctdRooms':'Value1','slctdcst':'Value2'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    //your list was updated, you may do something afterwards 
    } 
}); 
+0

、むしろ全体のリストよりも私のリストの単一の(最初の)要素を返します。これは私がやってミリアンペアものです愚かな質問。私は自分のリストを初期化しようとしましたが、どうすればいいか分かりません。私はメソッドを作成しましたpublic void GetUserContent(){Session ["someinfo"] = new List ();}しかしそれは働かない。あなたはそれを初期化する方法について詳しく説明できますか? –

+0

@R_valentin確かに、上記の私の答えを編集します。 – Ulises

+0

非常に貴重な指導に感謝します。私はsaveuserselectionメソッドを、初期化メソッドの成功のすべてをワンクリックで呼び、charmsのように機能します。私が知っていないことは、これがWebサービスへの投稿を2つのステップで行うよりも遅くすることができるかどうかということです。良い時がある! –

0

@Ulisesあなたの答えのおかげで多くのことを、しかし、これを求めて申し訳ありません

public List<SelectRms> GetUserContent() 
    { 
     List<SelectRms> SelectR=new List<SelectRms>(); 
     Session["someinfo"] = SelectR; 
     return Session["someinfo"] as List<SelectRms>; 
    } 


    [WebMethod(EnableSession = true)] 
    public void SaveUserSelection(string slctdRooms, string slctdcst) 
    { 
     List<SelectRms> SelectR = GetUserContent(); 
     SelectR.Add(new SelectRms { roomtype = slctdRooms, Roomcst = slctdcst }); 

    } 

しかし、その代わりに、それは、任意のヘルプ

+0

ここでの問題は、SaveUserSelection()を呼び出すたびにGetUserContent()を呼び出し、リストを初期化(空にする)することです。 – Ulises

関連する問題