【问题标题】:aspx (!Page.IsPostBack) Returns False on rendering page for the first timeaspx (!Page.IsPostBack) 第一次在渲染页面上返回 False
【发布时间】:2017-12-02 23:58:01
【问题描述】:

我们有一个 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,但应该返回 True,因此,我们的第二个跟踪没有被写入 DB。

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

【问题讨论】:

  • 恐怕问题不会从您提供的代码中看出,我建议通过毕业和测试来消除部分代码,如果有的话,从母版页开始等等在。希望对您有所帮助。
  • 向我们展示您用于访问GetResponseFromPaymentPage.aspx的代码。
  • stackoverflow.com/questions/5650580/… 进行测验,看看它如何识别回帖。我的猜测是上一页设置了__PREVIOUSPAGE
  • @mjwills 我们用您在代码第一部分中看到的脚本调用它
  • 您能查看源代码并向我们展示 frmRedireccion 表单的内容(来自 HTML)吗?

标签: c# asp.net url-redirection


【解决方案1】:

我带着解决方案回来了。

这是导致问题的块代码。

      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(默认),并且它可以启动并运行。

感谢您的时间和帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多