我有一个处理搜索查询的脚本。结果返回时带有一个可排序的标题,因此单击 Lot # 列标题将按批次 # ASC 对结果进行排序。但是,如果您已经对它进行了 ASC 排序(它存储在会话变量中),它将更改它以按批次 # DESC 对其进行排序(并更新该会话变量)。
只要搜索结果中不包含缩略图,所有这些都可以完美运行。当我确实包含它们时(所做的只是将搜索查询更改为包含图像路径,然后为图像列输出图像),一切都会中断。这是发生的事情:
当页面加载时,我response.write(Session["sort"])
看看我是如何排序的(ASC 或 DESC)。
如果单击列标题,我会检查新的“order by”列是否已经是“order by”列(也存储在会话变量中Session["orderby"]
)。
如果之前未将其设置为 order by 变量,则它将排序会话变量设置为 ASC,并将 order by session 变量设置为列名。
如果它以前被设置为 order by 变量,它会检查当前排序会话变量等于什么。如果它等于 ASC,那么它将排序会话变量设置为 DESC,并且会话变量的顺序保持不变。如果它等于 DESC,它将排序会话变量设置为 ASC,并且 order by 变量保持不变。
这部分实际上仍然有效。问题是在处理页面结束时,我再次response.write(Session["sort"])
查看变量已设置为什么。这是页面加载到屏幕之前发生的最后一件事。所以请记住,当页面被点击时发生的第一件事就是打印出排序会话变量,而它做的最后一件事就是再次打印出该变量。
因此,当页面中包含图像时,单击一列将使其按 ASC 或 DESC 排序(取决于我单击的列,因为它似乎与其他列交替出现)。因此,假设我单击的列导致第一个response.write(Session["sorty"])
为空白(因为尚未设置),第二个打印 ASC。当我再次单击该列时,第一个将打印 DESC(应该是 ASC,因为在最后一个打印的和第一个打印的之间绝对没有任何变化),第二个再次打印 ASC。
所以不知何故,当最后一次打印和第一次打印之间绝对没有页面处理时,会话变量在页面加载之间被更改。(并且在每隔一列中,它是相反的,每次都在顶部显示 ASC,在底部显示 DESC。)同样,这在没有图像的情况下完美运行。
这是其中包含缩略图的唯一代码:
if (Session["incThumb"] != null)
{
resultText += "<table style=\"width:100%;\">\n<tr style=\"font-weight:bold;text-align:left;\">\n<th style=\"border-bottom:1px solid #000;\">Thumb</th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_id\">Item ID</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=item_title\">Title</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_lot\">Lot</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_cs_txt_id\">Consignor ID</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblMcat.mcat_name\">Master Category</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblCat.cat_name\">Category</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_est_lo\">Low Est.</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_est_hi\">High Est.</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_reserve\">Reserve</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_status\">Status</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_pr\">Hammer Price</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblMailList.mail_ID\">Bidder ID</a></th>\n</tr>\n";
}
else
{
resultText += "<table style=\"width:100%;\">\n<tr style=\"font-weight:bold;text-align:left;\">\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_id\">Item ID</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=item_title\">Title</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_lot\">Lot</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_cs_txt_id\">Consignor ID</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblMcat.mcat_name\">Master Category</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblCat.cat_name\">Category</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_est_lo\">Low Est.</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_est_hi\">High Est.</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_reserve\">Reserve</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_status\">Status</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblItem.item_pr\">Hammer Price</a></th>\n<th style=\"border-bottom:1px solid #000;\"><a style=\"font-weight:bold; font-color:#000000;\" href=\"searchResults.aspx?page=" + page + "&orderBy=tblMailList.mail_ID\">Bidder ID</a></th>\n</tr>\n";
}
然后就在下面,我在打印 SQL 结果时也考虑了它,即(英文),如果用于包含缩略图的会话变量不为空,则包含用于缩略图的额外表格单元格并添加到图像中。
不用说,这个让我难过。我将不胜感激任何和所有的回应/评论。如果您想查看更多代码,请告诉我。
编辑
这是 response.write 代码:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session["sort"] + " 1<br/>");
string orderBy = "";
base.SubNavItems.Add("Search Home", "searchHome.aspx");
if (!IsPostBack)
{
}
if (!String.IsNullOrEmpty(Request.QueryString["page"]))
{
if (!String.IsNullOrEmpty(Request.QueryString["orderBy"])){
orderBy = Request.QueryString["orderBy"].ToString();
}
get_page(Int32.Parse(Request.QueryString["page"].ToString()), orderBy);
}
if (!String.IsNullOrEmpty(Request.Form["ctl00$ContentPlaceHolder1$save"]))
{
click_search();
}
Response.Write(Session["sort"] + " 1<br/>");
}
所以因为页面总是设置在列标题中,所以get_page()
当我对列进行排序时会调用该方法。 orderBy
通过查询字符串设置并传递给protected void get_page(Int32 page, String orderBy)
包含以下代码的方法。在该方法的末尾也是Response.Write(Session["sort"] + " 2<br/>");
一行,它是该方法所做的最后一件事。此时没有其他方法运行。此外,我刚刚从 .aspx 页面打印出排序变量,得到的结果与上次打印出的 .aspx.cs 页面打印的变量相同(这与下一次打印的第一个不同)。
我想我会继续并将逻辑添加到整个 order by/sort 中:
if (Session["orderBy"] != null)
{
if (Session["orderBy"].ToString() == orderBy)
{
if (Session["sort"].ToString() == "ASC")
{
Session["sort"] = "DESC";
}
else
{
Session["sort"] = "ASC";
}
}
else if (!String.IsNullOrEmpty(orderBy))
{
Session["sort"] = "ASC";
Session["orderBy"] = orderBy;
}
}
else if (!String.IsNullOrEmpty(orderBy))
{
Session["sort"] = "ASC";
Session["orderBy"] = orderBy;
}
else
{
Session["sort"] = "ASC";
Session["orderBy"] = "tblItem.item_id";
}