我有一個處理搜索查詢的腳本。結果將返回一個可排序的標題,因此單擊Lot#列標題將按批次#ASC對結果進行排序。但是,如果你已經將它存儲在ASC中(它存儲在一個會話變量中),它將會改變它的排序順序,並按批次#DESC進行排序(並更新該會話變量)。頁面處理之間的會話變量值更改以某種方式
只要縮略圖不包含在搜索結果中,所有這些都可以很好地工作。當我包含它們(所有這些都會改變搜索查詢以包含圖像路徑,然後輸出圖像列的圖像)時,它會全部中斷。這裏是發生了什麼:
當頁面加載,I 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頁面打印的變量的最後一個打印輸出相同的結果(這與下一次打印的第一個變量不同)。
我想我會繼續和由/排序邏輯添加到整個訂單:
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";
}
是'sorty'而不是'sort'錯字,還是我錯過了什麼? (只發生在一個地方)。順便說一下,可怕的意大利麪條 –
@RaphaëlAlthaus不,這是在實際的代碼(我剛剛修復,謝謝),但修復它並沒有解決這個問題。謝謝你的發現。 – James
你打電話給你最後一塊代碼是怎麼回事?這聽起來像你可以一次調用它_before_'Page_Load',一次_during_'Page_Load'。 – Rawling