1

動的コントロールは初めてですが、これまで、グリッドビューのテンプレート フィールドでそれらを正常に作成してきました。最近、ハイパーリンクからリンク ボタンに切り替え、いくつかの変更を加える必要がありましたが、まだ機能していません。

私のページには次のコードがあります(顕著な部分に要約されています)

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        ...
        ...
        TemplateField tf = new TemplateField();
        tf.HeaderText = "Action";
        tf.ItemTemplate = new AssignPage.MyTemplate(..., mylb);
        GridView1.Columns.Add(tf);


protected void Page_PreInit(object sender, EventArgs e)
{
    LinkButton lb = new LinkButton();
    lb.Text = "AssignAll";
    lb.Command += new CommandEventHandler(AssignAll_Click);
    lb.CommandName = "XXX";
    this.mylb = lb;




protected void AssignAll_Click(object sender, CommandEventArgs e)   
{
    string[] arg = new string[2]; // BREAK POINT HERE
    arg = e.CommandArgument.ToString().Split(';');
    ...
    ...
    Response.Redirect("BaseAndRepeats.aspx?id=" + r.Event.ID);

私が持っているテンプレートクラスで

    LinkButton lb;

    public MyTemplate(..., LinkButton _lb)
    {
        ...
        lb = _lb;
        ...



    public void InstantiateIn(System.Web.UI.Control container)
    {
            ...
            ...
            // various conditional statements

            lb.CommandArgument = mylist[rowCount].ReqtID.ToString() + ";" + mylist[rowCount].RotaUser;
            container.Controls.Add(lb);
            ...

ハンドラーのブレークポイントには到達しません

リンクボタンをクリックすると、リンクボタンがグリッドに表示され、Page_PreInit と Page_Load への呼び出しがあり、予想どおりポストバックです。ただし、AssignAll_Click が呼び出されることはありません。

ブラウザのフッターでは、ボタンリンクにカーソルを合わせると「javascript: __dooPsotabck(...」と表示されます

4

1 に答える 1

1

問題は次の行だと思います:

lb.Command += new CommandEventHandler(AssignAll_Click);

次のように変更します。

lb.Command += AssignAll_Click;

Page_PreInit編集:また、からに移動したいのですが、 (の外側)Page_Initでより多くの成功を収めることができます。これが私にとってうまくいく例です:Page_LoadIsPostBack

ASPX ページ:

<asp:Panel ID="TestPanel" runat="server" />

コードビハインド:

protected void Page_Init(object sender, EventArgs e)
{
    //Init used because TestPanel doesn't exist yet
    CreateTestButton();
}

private void CreateTestButton()
{
    var lb = new LinkButton();
    lb.Text = "hello";
    lb.Command += lb_Command;
    TestPanel.Controls.Add(lb);
}

void lb_Command(object sender, CommandEventArgs e)
{
    throw new NotImplementedException();
}

コードを調べると、GridView に別の列を追加し、その列内に各行のボタンを作成しているように見えますが、列が追加されPage_Load、ボタンが作成され、前にバインドされています。Page_PreInit

于 2015-02-05T16:02:12.517 に答える