我的代码'下面'的作用是:客户端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;很容易有一个简单的方法来完成这项工作。非常感谢
答案 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