aspx(!Page.IsPostBack)第一次在渲染页面上返回False

时间:2017-06-29 10:21:25

标签: c# asp.net url-redirection

我们有一个ASPX应用程序,在第一次呈现页面时表现得很奇怪。

让你进入上下文:

MyWeb - > MyPaymentWebAplication。

我们将客户发送到付款网站,我们可以从付款网站上回到网上。

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);
        }

回到网络,我们应该回顾参数并在最近打开的页面上开始做我们的事情。

    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中写入。

¿有谁知道可能导致这个问题的原因是什么?我们正在考虑我们系统上的任何补丁,更新或其他内容,因为我们没有其他解释,此应用程序已经运行了一段时间的问题。

1 个答案:

答案 0 :(得分:0)

我回来了解决方案。

以下是导致问题的阻止代码。

      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(默认)及其启动和运行。

感谢您的所有时间和帮助。