2012-04-27 20 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 }); 

} 

然后,我会retreave会话显示在另一页中的数据是这样

列表(SlctdRmWebSrv.SelectRms)SelctdRM =(名单(SlctdRmWebSrv.SelectRms))Sessio [“someinfo “];

 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 ();}。但它不起作用。你能否详细说明如何初始化MOre – 2012-04-30 11:25:14

+0

@R_valentin当然,我会在上面编辑我的答案。 – Ulises 2012-04-30 18:51:33

+0

非常感谢您的非常珍贵的指导。在初始化方法成功完成后,我一次点击就调用saveuserselection方法,并且它像charms一样工作。但我不知道的是,如果这可以让我的帖子到web服务比两步慢。祝好! – 2012-05-01 13:59:50

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 2012-05-01 13:50:42