我们有一个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中写入。
¿有谁知道可能导致这个问题的原因是什么?我们正在考虑我们系统上的任何补丁,更新或其他内容,因为我们没有其他解释,此应用程序已经运行了一段时间的问题。
答案 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(默认)及其启动和运行。
感谢您的所有时间和帮助。