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”];

       if(SelctdRM != null)


        {

            repeater1.DataSource = SelctdRM;

             repeater1.DataBind();
        }

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

4

2 回答 2

0

听起来您SaveUserSelection从 javascript 中多次调用。如果是这种情况,那么只有第一次您的列表才会被初始化。

因此,您的列表将继续向“旧”列表添加内容,因为该列表尚未被清除或重新初始化。

您可能应该将初始化放在一个单独的方法中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 回答
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 回答