0

ページの状態を永続的な方法 (セッション) で保存およびロードする方法が必要です。これが必要なプロジェクトは、いくつかの構成ページを持つイントラネット Web アプリケーションであり、それらのいくつかは保存しようとしている場合に確認が必要です。確認ページは別のページにする必要があります。私が拘束されている制限のため、JavaScript を使用することはできません。これは私がこれまでに思いついたものです:

確認リクエスト:

[Serializable]
public class ConfirmationRequest
{
    private Uri _url;
    public Uri Url
    { get { return _url; } }

    private byte[] _data;
    public byte[] Data
    { get { return _data; } }

    public ConfirmationRequest(Uri url, byte[] data)
    {
        _url = url;
        _data = data;
    }
}

確認応答:

[Serializable]
public class ConfirmationResponse
{
    private ConfirmationRequest _request;
    public ConfirmationRequest Request
    { get { return _request; } }

    private ConfirmationResult _result = ConfirmationResult.None;
    public ConfirmationResult Result
    { get { return _result; } }

    public ConfirmationResponse(ConfirmationRequest request, ConfirmationResult result)
    {
        _request = request;
        _result = result;
    }
}

public enum ConfirmationResult { Denied = -1, None = 0, Granted = 1 }

確認.aspx:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.UrlReferrer != null)
        {
            string key = "Confirmation:" + Request.UrlReferrer.PathAndQuery;
            if (Session[key] != null)
            {
                ConfirmationRequest confirmationRequest = Session[key] as ConfirmationRequest;
                if (confirmationRequest != null)
                {
                    Session[key] = new ConfirmationResponse(confirmationRequest, ConfirmationResult.Granted);
                    Response.Redirect(confirmationRequest.Url.PathAndQuery, false);
                }
            }
        }
    }

PageToConfirm.aspx:

    private bool _confirmationRequired = false;

    protected void btnSave_Click(object sender, EventArgs e)
    {
        _confirmationRequired = true;
        Response.Redirect("Confirmation.aspx", false);
    }

    protected override void SavePageStateToPersistenceMedium(object state)
    {
        if (_confirmationRequired)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                LosFormatter formatter = new LosFormatter();
                formatter.Serialize(stream, state);
                stream.Flush();

                Session["Confirmation:" + Request.UrlReferrer.PathAndQuery] = new ConfirmationRequest(Request.UrlReferrer, stream.ToArray());
            }
        }
        base.SavePageStateToPersistenceMedium(state);
    }

Confirmation.aspx から PageToConfirm.aspx にリダイレクトされた後、Page State をロードする方法が見つからないようです。

4

2 に答える 2

1

ビューステートを意味する場合は、Server.Transferの代わりにを使用してみてくださいResponse.Redirect

パラメータをtrueに設定するpreserveFormと、ターゲットページは、 PreviousPageプロパティを使用して前のページのビューステートにアクセスできるようになります。

于 2011-03-24T09:58:29.093 に答える