0

したがって、これはシナリオです。

ログイン制御されたすべてのページの基本クラスがあります。

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

そして、regularpage.aspx基本クラスから継承するページ:

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

ここで、元のURLがhttp://localhost/regularpage.aspxであり、それであるとしましょうSession.Timeout = 5。転送が行われた後に更新が発生すると、問題が発生します。エラーが発生し、 http:// localhost/305404 Not FoundのURLが変更されます。に注意してください。5 * 60 + 5 = 305

なぜこれが起こっているのか知っていますか?解決策がありますか?

PD:otherpage.aspxのregularpage.aspxのいくつかのプロパティにアクセスする必要があるため、転送を使用します。これに対して別のソリューションを提供できるかもしれません。

4

1 に答える 1

1

server.Transferを呼び出すだけの場合は、base.Page_Loadを呼び出す理由はほとんどありません。正確に何を達成しようとしていますか?一部のプロパティにアクセスするだけの場合は、Pageオブジェクトに依存しないビジネスロジックにこれを抽象化する必要があります。

これが404の問題の原因でもあります...これが発生するためには、問題はページのレンダリングされた出力にある必要があります(チェックアウトしてください)。meta-refreshタグの直後に1つのページを切り取り、新しいページを開始すると、ASP.NETはすべてを同じ応答ストリームにダンプしているようです。要するに、あなたはそれを間違っているのです。:)これは、適切に配置されたResponse.Clear()で修正できる可能性がありますが、ここでは実際の問題ではありません...そしてrefreshタグが失われます。

于 2010-03-16T21:56:41.610 に答える