停止旧会话列表对象加起来

时间:2012-04-27 14:30:40

标签: asp.net web-services

我的代码'下面'的作用是:客户端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 });

}
  

然后我会撤消会话以在另一个页面中显示数据

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

       if(SelctdRM != null)


        {

            repeater1.DataSource = SelctdRM;

             repeater1.DataBind();
        }

问题是,每次我撤回会话以创建新列表时,新数据都会添加到旧数据中。我想要的情况是只显示当前数据。我尝试清除列表,放弃会话或清除转发器,然后再添加新的转发器,hehlp;很容易有一个简单的方法来完成这项工作。非常感谢

2 个答案:

答案 0 :(得分: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
  }
});

答案 1 :(得分: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 });

    }

但它返回我列表中的单个(第一个)元素而不是整个列表,Any Help