1

asp.net ライフサイクル階層に関して問題があります。

基本的に、GridView を含むユーザー コントロールが 1 つあります。この GridView は、コントロールのパブリック プロパティに基づいて動的に生成されます (以下の簡略化されたコードでは Parameter という名前です)。

このコントロールを aspx ページに挿入し、その Parameter プロパティを設定して DataBind(Parameter) を呼び出すと、すべて問題ありません。GridView が生成され、UI に入力されます。

ページをポストバックすると問題が発生します。コントロールの ViewState のデータを使用して GridView を設定できるように、GridView 構造を再生成する必要があります。その内容を達成できるように。ただし、GridView 構造が動的に生成され、それに設定された Parameter プロパティに基づいている限り、これは不可能です。ユーザー コントロールの OnInit はページの OnInit の前に呼び出されるため、GridView 構造体の生成後に Parameter プロパティが設定されます。その結果、最終的に空の Gridview が得られます。

ここにコードを簡単に示します。

これを克服する方法を教えてもらえますか?

明示的に asp.NET にグリッドビューの ViewState を再読み込みさせることはできますか?

ページHomePage.aspxには、このような方法でOnInit イベント ハンドラーがあり、ユーザー コントロールctlMyUSerControlプロパティを設定します。

protected override void OnInit(EventArgs e)
    {

              ctlMyUserControl.Parameter = new Parameter()
                       name="Orhan",
                       surname= "Pamuk"};

        }

そしてctlMyUserControlの OnInit に

    protected override void OnInit(EventArgs e)
{
        if (Page.IsPostBack && Parameter !=null && SomeGridViewRowsExistOnUI)
        {
                        // Generate dynamic columns based on Parameter property
                        // So that gridview can be populated 
                       // with the post-backed data which 
                        // should contain the ViewState of the gridview 
                       GenerateGridViewColumns(Parameter);
        }

    base.OnInit(e);
}
4

1 に答える 1

1

私はそれを売りました。

私が行ったことは、ユーザー コントロールのコンテナー ページで GridView 列を再生成することです。

したがって、ページの OnInit で列を再生成しますが、それはまだ LoadViewState() メソッドの呼び出しの前です。

protected override void OnInit(EventArgs e)
    {

              Parameter parameter = new Parameter()
                       name="Orhan",
                       surname= "Pamuk"};

               ctlMyUserControl.GenerateGridViewColumns(parameter);


        }
于 2010-06-30T08:50:47.007 に答える