我有一個aspx頁面,它顯示了一個等待審查的問題的網格視圖,每頁顯示10個問題。如果選擇了某個問題,則會在新頁面中打開,審閱者可以提交審閱或取消並返回到需要審閱的問題列表。會話變量不被看到/使用
目前這工作正常,但有審閱者的要求,所以如果他們在網頁視圖的第4頁,當他們去問一個問題,他們會返回到第4頁,如果他們擊中取消並返回到列表問題(目前他們返回到第1頁)。
因此,我設置了幾個會話變量來捕獲所選問題並捕獲gridview控件的pageindex以供將來使用。嘗試在詳細信息頁面的頁面加載上使用會話變量作爲questionId,但它未被傳遞。在返回到評論列表頁面時,在gridview上設置的頁面索引始終爲0,而不是會話變量。
更新GridView控件(注意兩個控件,一個超鏈接(這應該走開一旦對方LinkButton控件作品):
<asp:GridView ID="GridView1" runat="server" Caption="Questions Awaiting Review" AllowSorting="True" PagerSettings-Mode="NumericFirstLast" OnPageIndexChanging="GridView1_PageIndexChanging"
CaptionAlign="Top" EmptyDataText="No Questions Pending Review." PageSize="10" AllowPaging="true" PagerStyle-HorizontalAlign="Center" PagerStyle-Font-Size="Large" DataKeyNames="QuestionID"
AutoGenerateColumns="false" AlternatingRowStyle-BackColor="#cccccc">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="QuestionID" runat="server" Text='<%# Eval("QuestionID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="KeyObjective" HeaderText="Key Objective" ItemStyle-Width="250" />
<asp:BoundField DataField="SubmitDate" HeaderText="Submitted Date" ItemStyle-Width="60" />
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="Details" runat="server" NavigateUrl='<%#"~/Review/ReviewDetail.aspx?Id=" + Eval("QuestionID") +"&PageIndex=" + GridView1.PageIndex %>'>View Question</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="Details2" runat="server" Text="Session" OnClick="Session_OnClick"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
onclick事件第二個按鈕:
protected void Session_OnClick(object sender, EventArgs e)
{
Session["PageIndex"] = GridView1.PageIndex;
Session["QuestionId"] = GridView1.SelectedDataKey;
Response.Redirect("~/Review/ReviewDetail.aspx", false;
}
連接字符串在現在沒有得到參數「QuestionID」值的詳細頁面上;):
SqlCommand command = new SqlCommand("QuestionDetail", Conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@QuestionID", SqlDbType.BigInt));
command.Parameters["@QuestionID"].Value = Convert.ToInt64(Session["QuestionId"]);
Conn.Open();
SqlDataReader reader = command.ExecuteReader();
pageLoad的和GridView應使用會話變量來設置網格控件的頁面ReviewList頁面上具有約束力,但總是會默認頁0:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindGridView();
}
else
{
if (Convert.ToInt32(Session["PageIndex"]) !=0)
{
GridView1.PageIndex = Convert.ToInt32(Session["PageIndex"]);
bindGridView();
}
}
}
private void bindGridView()
{
string connectionString = WebConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
string selectSQL = String.Format("Select QuestionID, KeyObjective, SubmitDate from Questions where Author <> '{0}' and QuestionID not in(Select QuestionID from Review where Reviewer = '{0}')", User.Identity.Name);
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "Review");
GridView1.DataSource = ds;
GridView1.DataBind();
}
您應該在您的瀏覽器中打開開發人員控制檯,並觀察您的重定向的響應標題中的真實位置..我確信它會幫助您。 –
當我在firefox中運行調試器時,我單擊該按鈕時返回的所有內容爲:__doPostBack('ctl00 $ MainContent $ GridView1 $ ctl02 $ Details2','')不知道應該告訴我什麼。 –
當你看到你的重定向的響應標題,你會看到你重定向到什麼網址,並且可能會看到querystring中的「Id」參數有什麼問題(格式錯誤,爲空)。不要看javascript控制檯,你必須看看網絡標籤(這是它的鉻,我不使用FF),看看如何rosponse看起來像。 –