1

LinkButton動的にロードしてポストバック イベントを発生させようとしていますが、これを処理します。

Command私は, CommandNameand - にまたがっており、CommandArgumentこれは本当に便利に見えました..だから私はそれをいじり始めましたが、現在、希望どおりに作業することができません。

リンクは、その場で作成されるテーブル内にレンダリングされます。リンクを生成するコードは次のとおりです。

    // The links are stored in Session since I was told that the objects need to remain intact across requests.
    LinkButton GetEditCardLink(string card)
    {
        if (!IsPostBack)
        {
            TW("Creating Link for Card '" + card + "' and Placing in Session.", true);
            LinkButton link = CreateEditLink(card);
            Business.Session.Set<LinkButton>("LinkedCards_EditLink_" + card, link);
        }
        return Business.Session.Get<LinkButton>("LinkedCards_EditLink_" + card);
    }

    // Here the link itself is created, note the ID and Command details are set.
    LinkButton CreateEditLink(string forCard)
    {
        TW("Setting Up Link for Card: " + forCard, true);
        LinkButton rtn = new LinkButton();
        rtn.ID = "Edit_" + forCard;
        rtn.Text = Resources.Header("EditDetails");
        rtn.CommandName = "Edit";
        rtn.CommandArgument = forCard;
        rtn.Command += new CommandEventHandler(RedirectToEdit);
        rtn.Attributes["style"] = "display: block; text-align:center;";
        return rtn;
    }

    // ... And the delegate I want called on PostBack..
    void RedirectToEdit(object sender, CommandEventArgs e)
    {
        TW("RedirectToEdit Called:\r\nName: " + e.CommandName + "\r\nArgument: " + e.CommandArgument);
    }

トレースは、LinkBut​​tons が正しく読み込まれており、一度しか作成されていないことを確認しているため、理論的には問題ないはずですが、リンクをクリックすると PostBack が実行されますが、RedirectToEditメソッドは呼び出されませんか?

すべての助けに感謝します!:)

ノート

ああ、私が言及すべきだと思ったのは、 :)TWの単なるユーティリティメソッドですTrace.Write/Warn

4

2 に答える 2

1

イベント処理が必要なコントロールを作成するときは、処理の早い段階でイベント ハンドラーが接続されるようにする必要があります。テーブルを作成しているページの OnInit をオーバーライドし、そこにテーブル作成コードを移動します。@ScarletGarden が示唆するように、PostBack であるかどうかにかかわらず、コントロールを追加する必要もあります。そこにコントロールを追加すると、Page_Loadでそれを行うのはイベントが検出されるには遅すぎると思います。

参照

于 2009-02-05T12:33:51.427 に答える
0

これが私の試用版で、うまくいきました:

protected void Page_Load(object sender, EventArgs e)
{
    //if (!IsPostBack)
    //{
        placeHolderAtPage.Controls.Add(CreateEditLink("forCard1"));
    //}
}

LinkButton CreateEditLink(string forCard)
{
    LinkButton rtn = new LinkButton();
    rtn.ID = "Edit_" + forCard;
    rtn.Text = "EditDetails";
    rtn.CommandName = "Edit";
    rtn.CommandArgument = forCard;
    rtn.Command += new CommandEventHandler(RedirectToEdit);
    rtn.Attributes["style"] = "display: block; text-align:center;";
    return rtn;
}

void RedirectToEdit(object sender, CommandEventArgs e)
{
    Response.Write("RedirectToEdit Called:\r\nName: " + e.CommandName + "\r\nArgument: " + e.CommandArgument);
}

IsPostBack 行のコメントを外すと、RedirectToEdit は役に立たなくなります。IsPostBack の制御下にあるのはバインディング コードのみです。

于 2009-02-05T12:29:51.373 に答える