簡體   English   中英

aspx(!Page.IsPostBack)第一次在呈現頁面上返回False

[英]aspx (!Page.IsPostBack) Returns False on rendering page for the first time

我們有一個ASPX應用程序,它在首次呈現頁面時表現異常。

使您處於上下文中:

MyWeb-> MyPaymentWebAplication。

我們將客戶發送到付款站點,我們建議將付款站點的信息發送回Web。

MyPaymentWebAplication-> MyWeb。

這是發生問題的地方。

我們的網站上有一個特殊的頁面:GetResponseFromPaymentPage.aspx,此頁面僅用於從付款中獲得OK響應,因此從理論上講,它始終必須是第一次呈現,因此,請聯接(!IsPostBack) 。

這里的問題是頁面沒有加入這里,而是跳出了頁面,沒有任何執行,因此我們沒有得到任何確認。

代碼在這里:

    try
        {

            HtmlForm frm = (HtmlForm)FindControl("frmRedireccion");

            NameValueCollection parametros = (NameValueCollection)Session[ConstantesSesion.SESSION_PARAMETERS_RETURNED];

            frm.Action = parametros["AppReturnURL"]; 

            foreach (string key in parametros.Keys)
            {
                if (((HtmlInputHidden)frm.FindControl(key)) != null)
                {
                    ((HtmlInputHidden)frm.FindControl(key)).Value = parametros[key];
                }
            }                



            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<script language=Javascript>\n");
            sb.Append("  window.opener.name = 'MyParent'; ");
            sb.Append("  document.forms.namedItem('frmRedireccion').target = 'MyParent'; ");
            sb.Append(" document.forms.namedItem('frmRedireccion').submit(); ");
            sb.Append(" self.window.close(); ");
            sb.Append("</script>");

            ClientScript.RegisterStartupScript(this.GetType(), "script", sb.ToString());

        }
        catch (Exception ex)
        {
            ExceptionService.SetException("Excepción en el método " + MethodBase.GetCurrentMethod().Name, ex);
        }

回到Web,我們應該獲取參數並在最近打開的頁面上開始執行操作。

    protected void Page_Load(object sender, EventArgs e)
{
    //We are writing these traces on DB!
    MyTraces con = new MyTraces();
    con.InsertTrace("Im a Trace!", "!We are in!", System.DateTime.Today, "1");
    //************************************************************


    if (!Page.IsPostBack) 
    {
       // These ones are not behing seen anywhere in DB
        con.InsertTrace("Im a Trace!", "!We are in step 2 Already!",  System.DateTime.Today,"2");

因此,我們假設!Page.IsPostBack沒有返回True,應該返回它,並且由此,我們的第二條跟蹤沒有寫入DB。

¿有人知道什么可能導致此問題嗎? 我們正在考慮系統上的任何補丁程序,更新或其他問題,因為我們沒有其他解釋,該應用已運行了一段時間,沒有任何問題。

我回來了一個解決方案。

這是引起麻煩的塊代碼。

      System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("<script language=Javascript>\n");
        sb.Append("  window.opener.name = 'MyParent'; ");
        sb.Append("  document.forms.namedItem('frmRedireccion').target = 'MyParent'; ");
        sb.Append(" document.forms.namedItem('frmRedireccion').submit(); ");
        sb.Append(" self.window.close(); ");
        sb.Append("</script>");

        ClientScript.RegisterStartupScript(this.GetType(), "script", sb.ToString());

由於某些未知的原因,當使用此代碼進行重定向時,新創建的頁面的行為就好像是在執行回發而不是首次呈現一樣。

我們不知道是什么原因造成的,我們懷疑它與某些Windows安全修補程序有關,但我們無法對其進行探測。

在這種情況下,我們用以下代碼替換了此代碼:

    Response.redirect();

我們對其進行了一些微調,以使其執行POST而不是GET(默認)並啟動並運行。

感謝您的時間和幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM