我有一个处理搜索查询的脚本。返回的结果带有可排序的标题,因此单击Lot#列标题将按批次#ASC对结果进行排序。但是,如果您已经将它排序为ASC(它存储在会话变量中),它将更改它以按批次#DESC对其进行排序(并更新该会话变量)。
只要缩略图不包含在搜索结果中,所有这一切都能完美运行。当我包括它们(所有这一切都是改变搜索查询以包括图像路径,然后输出图像列的图像),它都会中断。以下是发生的事情:
当页面加载时,我response.write(Session["sort"])
看看我如何排序(ASC或DESC)。
如果单击列标题,我会检查新的“order by”列是否已经是“order by”列(也存储在会话变量Session["orderby"]
中)。
如果之前未将其设置为变量的顺序,则会将排序会话变量设置为ASC,并按会话变量将顺序设置为列名。
如果之前已将其设置为变量的顺序,则会检查当前排序会话变量的等于。如果它等于ASC,则它将排序会话变量设置为DESC,并且按会话变量的顺序保持不变。如果它等于DESC,它将排序会话变量设置为ASC,并且变量的顺序保持不变。
这部分实际上仍然适用。问题是,在处理页面结束时,我再次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页面打印出sort变量,得到与.aspx.cs页面打印的变量的最后一次打印相同的结果(这与下次打印的第一次打印不同)。
我想我会继续通过/ 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";
}
答案 0 :(得分:2)
我猜你会在IE中体验到这一点。
此外,我猜测可能存在无效的图像源,因此它会回发到根目录。我们曾经遇到过这个问题,在您使用FireBug
或Fiddler
等网络流量观看网络流量之前,您从未发现过这个问题。由于Page_Load
中存在的代码,我们的应用程序通常只是注销。
有效的情况是,当图像URL失败时,ASP.NET将在页面的根目录接收请求,从而回发并消除信息。
另外,请关注@peer建议。
答案 1 :(得分:1)
当我读到你的帖子时,我想知道为什么你把变量放在会话中,变量都在控件/页面的上下文中,所以你应该把它们放在ViewState中。当您将它们放入会话时,它将在您网站的多个页面上共享,这可能会导致您拥有的行为。我想当你使用网站上的后退按钮时,你也会有意想不到的行为,这是因为在会话中存储变量而不是视图状态。
将所有会话替换为ViewState(orderBy和sort),看看你是否还有奇怪的行为。