ASP C# 以POST方式傳送參數並轉向瀏覽網頁

在 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"));
}
廣告
Posted in ASPC# | 已加上的標籤