在 ASP.Net C# 中,以POST方式傳送參數到別的網頁,並轉向瀏覽此網頁
基本上使用 Redirect and POST 此篇文章的方法
http://www.codeproject.com/Articles/37539/Redirect-and-POST-in-ASP-NET
在使用 UpdatePanel 的區域內,則使用以上方法之 function 的 Control,需對 ScriptManager 做註冊的動作。
其用意為,以 PostBackTrigger 方法,更新整個頁面。否則,在執行階段會有 thread 的 error exception。
以 LinkButton 的 click 事件為例
protected void lbtnETPR_Click(object sender, EventArgs e) { LinkButton lbtnETPR = sender as LinkButton; GridViewRow gvRow = lbtnETPR.NamingContainer as GridViewRow; string adno = gvRow.Cells[0].Text; DataRow[] row = pEventDs.Tables["pEvents"].Select("ammadno = '" + adno + "'"); string crtno = row[0]["ammpatno"].ToString(); NameValueCollection data = new NameValueCollection(); data.Add("crtno", crtno); data.Add("hospno", "01"); data.Add("notshowfg", "Y"); HttpHelper.RedirectAndPOST(this.Page, "http://192.168.1.1/tpr/tprshow.aspx", data); }
靜態的註冊方式:
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:LinkButton ID="lbtnETPR" runat="server" OnClick="lbtnETPR_Click" Text="ETPR" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="lbtnETPR" /> </Triggers> </asp:UpdatePanel>
如果,control 是位於 GridView 元件的自定欄位(TemplateField)內,則需使用動態的註冊方式:
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:GridView ID="GridView1" runat="server" DataKeyNames="ammadno" OnRowDataBound="GridView1_RowDataBound" > <Columns> <asp:TemplateField HeaderText="Order"> <ItemTemplate> <asp:LinkButton ID="lbtnETPR" runat="server" OnClick="lbtnETPR_Click" Text="ETPR" /> <asp:LinkButton ID="lbtnPrscrp" runat="server" Onclick="lbtnPrscrp_Click" Text="Order" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </ContentTemplate> </asp:UpdatePanel>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType != DataControlRowType.DataRow) return; //相當於在 aspx 中, 加入 UpdatePanel 之 PostBackTrigger 的作用 ToolkitScriptManager1.RegisterPostBackControl(e.Row.FindControl("lbtnETPR")); }