每当用户点击Bookmark按钮时,我想将该行的ProgramID发送到List并使用Session将其传输到另一个页面。但是我的gridview传输了所有programID,即使该ID存在于列表中。我究竟做错了什么? 这是Bookmark按钮的代码:
protected void btnSelect_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
GridViewRow row = (GridViewRow)b.NamingContainer;
var ProgramID = row.FindControl("lblProgramID") as Label;
string stringProgramID = ProgramID.Text;
List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"];
if (bookmarkPrograms == null)
bookmarkPrograms = new List<string>();
bookmarkPrograms.Add(stringProgramID);
Session["BookmarkProgram"] = bookmarkPrograms;
}
以下是另一个页面中gridview的代码:
protected void Page_Load(object sender, EventArgs e)
{
List<string> bookMarkPrograms = (List<string>)Session["BookmarkProgram"];
GridView1.DataSource = bookMarkPrograms;
GridView1.DataBind();
}
答案 0 :(得分:0)
不确定事件的流程。但是,如果我找到你,你希望列表不断添加。你在做什么
Session["BookmarkProgram"] = bookmarkPrograms;
这意味着此变量就是该特定值。但是,如果你再次这样做,那么就会发生这种情况:
List<string> bookmarkPrograms = new List<string>();
所以你要删除旧的。创建一个到目前为止获取列表的方法,如果为null或为空,则创建一个新列表。否则,不要或者你已经清空了你到目前为止所拥有的东西。
更新:你可以试试这个:
List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"] == null ? new List<string>():(List<string>)Session["BookmarkProgram"];
要检查该值是否已存在,请执行以下操作:
if (bookmarkPrograms.Any(c=>c.Equals(ProgramID)){//don't add}
内部表达式返回一个布尔值,当列表中的值等于您要比较的值时,该布尔值为true。这个例子假设ProgramID是一个字符串。由于它们是字符串,您可能需要添加trim()和tolower(),但在这种情况下似乎不会意外添加空格......或者外壳可能会影响。由于它在存在时返回true,因此在它前面添加!
,以便在它不存在时添加到列表中。
答案 1 :(得分:0)
只想为将来需要它的人发布整个解决方案:
protected void btnBookmark_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
GridViewRow row = (GridViewRow)b.NamingContainer;
var ProgramID = row.FindControl("lblProgramID") as Label;
string stringProgramID = ProgramID.Text;
List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"];
if (bookmarkPrograms == null)
bookmarkPrograms = new List<string>();
if (bookmarkPrograms.Any(c => c.Equals(stringProgramID)))
{
FormMessage.Text = "You bookmarked this program already";
}
else
{
bookmarkPrograms.Add(stringProgramID);
}
Session["BookmarkProgram"] = bookmarkPrograms;
}