0

私のコード「以下」が行うことは次のとおりです。クライアントのJavaScriptは、一般的なリストを作成してセッションに保存するWebサービスメソッドを呼び出します。

 [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 });

}

次に、セッションを取得して、このような別のページにデータを表示します

List(SlctdRmWebSrv.SelectRms) SelctdRM = (List(SlctdRmWebSrv.SelectRms))Sessio["someinfo"];

       if(SelctdRM != null)


        {

            repeater1.DataSource = SelctdRM;

             repeater1.DataBind();
        }

問題は、セッションを取得して新しいリストを作成するたびに、新しいデータが古いリストに追加されることです。現在のデータのみが表示される状況が必要です。新しいリストを追加する前に、リストをクリアするか、セッションを放棄するか、リピーターをクリアしようとしました。簡単にこれを行う簡単な方法があります。どうもありがとう

4

2 に答える 2

0

@ユリセス。これは私がやっていることです:

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 });

    }

しかし、代わりに、リスト全体ではなく、リストの単一 (最初) の要素を返します。

于 2012-04-30T13:42:22.040 に答える
0

SaveUserSelectionJavaScriptから複数回呼び出しているようです。その場合、リストが初期化されるのは初めてです。

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

おそらく、初期化を別のメソッドに入れる必要があります(リストをクリア/初期化するためだけに、オンにする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
  }
});
于 2012-04-27T14:57:27.257 に答える