5

データベースにあるすべてのオブジェクトを含むテーブルがあります。それらを Page_Load 関数にロードします。ボタンをクリックすると、そのクリックのハンドラーがデータベースのテキストフィールドに書かれた名前の新しいオブジェクトを配置するテキストフィールドとボタンがあります。

ここで、クリック後にテーブルに新しい項目が追加されたページが再び読み込まれるようにしたいと考えています。問題は、ボタン イベント ハンドラーが Page_Load 関数の後に実行されることです。

これに対する解決策は、Page_Load で IsPostBack を使用するか、プリロード関数を使用することです。問題は、3 つの異なるボタンを使用する場合、3 つの異なる便利な機能ではなく、それらを区別する必要があることです。

この問題がない解決策はありますか?

コード:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["userId"] == null)
                Response.Redirect("Login.aspx");

            // LOAD DATA FROM DB
        }

        protected void CreateObject(object sender, EventArgs e)
        {
            // SAVE THE NEW OBJECT
        }
4

5 に答える 5

9

Load ではなく、PreRender 中にデータをロードしてみてください。

    protected void Page_Load(object sender, EventArgs e)
    {
        this.PreRender += Page_PreRender
        if (Session["userId"] == null)
            Response.Redirect("Login.aspx");
    }

    protected bool reloadNeeded {get; set;}

    protected void CreateObject(object sender, EventArgs e)
    {
        // SAVE THE NEW OBJECT
        reloadNeeded = true;
    }


    protected void Page_PreRender(object sender, EventArgs e)
    {
        if(reloadNeeded || !IsPostBack)
        // LOAD DATA FROM DB
    }
于 2012-04-30T14:49:42.257 に答える
2

イベントターゲットを確認して、必要なことを行うことができます:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
         string eventTarget = Page.Request.Params["__EVENTTARGET"];
         if(whatever)
         {
             //do your logic here
         }
    }
}

ポスト バックを行う Page_Load イベントでコントロール名を取得します。

于 2012-04-30T13:26:04.680 に答える
0

Page_PreRenderCompleteイベントを使用してテーブルを取得します。こうすることで、すべてのユーザー イベントが発生した後、常に最新のデータがページに表示されます。

于 2012-04-30T15:06:01.413 に答える
0

クリック イベントにあるものを新しいメソッドに移動してみませんか。次に、ページ読み込みの最初の行としてそのメソッドを呼び出しますか?

于 2012-04-30T15:20:21.480 に答える