0

コントロールがinitにロードされたときに発生する問題がありますが、それでも適切なポストバックイベントを時間どおりに発生させるのに役立ちません。

標準のasp.netウィザードの読み込み方法を回避する動的制御読み込みを使用して、切り替え、説明付きのリンク、完全にカスタマイズされたステップ、サブステップの統合を可能にする豊富なウィザードコントロールを作成しようとしています。

アイデアは、左側のナビゲーション、右側のコンテンツ、または右側の部分から実行され、領域全体に渡るサブステップを持つことです。

ソースプロジェクトをダウンロード

4

2 に答える 2

0

どうもありがとう..よく答えが見つかりました-負荷制御方法でidが問題でした。私はこのウィザードを行っていました..まあ、ほとんどのことがうまくいきます。誰かがこれがどのように機能するかを知りたい場合..いくつかの更新があります:

public void LoadSplitViewControl(string path)
{
    SwitchNavigationView(NavigationView.SplitView);
    LastNavigationView = NavigationView.SplitView;
    LoadControl(SplitControlLoader, path, "LoadedControlSplit");
}

public void LoadSingleViewControl(string path)
{
    SwitchNavigationView(NavigationView.SingleView);
    LastNavigationView = NavigationView.SingleView;
    LoadControl(SingleControlLoader, path, "LoadedControlSingle");
}

public void LoadSingleViewControlAsClear(string path)
{
    SwitchNavigationView(NavigationView.SingleView);
    LastNavigationView = NavigationView.SingleView;
    LoadControlAsClear(SingleControlLoader, path, "LoadedControlSingle");
}

private void LoadControl(PlaceHolder holder, string path, string ID)
{
    UserControl ctrl = (UserControl)Page.LoadControl(path);
    ctrl.ID = ID;
    LastControlPath = path;
    holder.Controls.Clear();
    holder.Controls.Add(ctrl);
}

//スプリットビューを使用してステップロードされたコントロールを使用しているため、シングルビューを使用してサブステップコントロールを使用しているため、ビューステートが無効になる場合があるため、エラーがスローされますが、以下のメソッドをロードする LoadSingleViewControlAsClear を使用してこれを解決できます。

private void LoadControlAsClear(PlaceHolder holder, string path, string ID)
{
    UserControl ctrl = (UserControl)Page.LoadControl(path);
    ctrl.ID = ID;
    LastControlPath = path;
    ctrl.EnableViewState = false;
    holder.Controls.Add(ctrl);
}

/私がそのようなウィザードに使用しているもう1つのクールなアイデアは、ビューステートではなく、ステップで収集された値を保存するためのセッションオブジェクトを使用していることです。私のセッション オブジェクト キーは、認証されたユーザー名と pageguid によって生成されます。そのため、多くのページを読み込むことができ、それぞれが異なるセッション オブジェクトを処理します。/

public Guid PageGuid
{
    get
    {
        if (PageGuidField.Value == "")
        {
            var _pageGuid = Guid.NewGuid();
            PageGuidField.Value = _pageGuid.ToString();
            return _pageGuid;
        }
        return new Guid(PageGuidField.Value);
    }
}
于 2009-06-18T11:17:08.913 に答える
0

わかりました、質問を読み直しました。これがあなたがしなければならないことです。ポストバックごとにこれらのコントロールを再ロードし、常に同じ「ID」を指定する必要があります。これは、Page_Init または Page_Load イベントで実行できます。そしてもちろん、ポストバックごとにイベント ハンドラーを再アタッチする必要があります。

于 2009-06-16T20:09:13.930 に答える