1

複雑なコードに問題があります。デリゲートメソッド呼び出しが、動的に追加されたボタンのクリックイベントを中断しているようです。100%確実になるように基本的な例をコーディングしていませんが、それが起こっているように見えます。

ユーザーコントロールを含む.aspxページがあります

<wachter:ViewEditTemplateControl ID="veSiteInfo" runat="server" Mode="View" EnableAjax="false" CanEditPermission="SiteInfoCanEdit">
                                <ViewButtonsTemplate>
                                 <asp:ImageButton ID="ibMap" CommandName="Map" ImageUrl="../Images/NavIcons/map.png" Visible="true" ToolTip="Site Map" runat="server" />
                                 <asp:ImageButton ID="ibtnSiteNotes" CommandName="SiteNotes"  ImageUrl="/Images/iconInfo.png" visible="false" ToolTip="Site Notes" runat="server"  />
                                 <asp:ImageButton ID="imgEdit" CommandName="Edit" ToolTip="Edit" runat="server" ImageUrl="/Images/iconEdit.png" />
                                </ViewButtonsTemplate>
                                <ViewTemplate>
                                    <uc1:SiteInformationView ID="SiteInformationView1" runat="server" />
                                </ViewTemplate>
                                <EditTemplate>
                                    <uc1:SiteInformationEdit ID="SiteInformationEdit1" runat="server" />
                                </EditTemplate>
                            </wachter:ViewEditTemplateControl>

.aspxのコードビハインドで、ViewTemplateのユーザーコントロールへのデリゲートを設定します

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        (veSiteInfo.FindControl("SiteInformationView1") as JobSiteViewControl).SiteChanged += SiteChanged;
    }

このデリゲートは、編集ボタンimgEditの表示を設定するために使用されます。

ViewEditTemplateControlには、保存/編集ボタンを動的に追加するコードビハインドに少しのコードが含まれています

Button btnSave = new Button();
            btnSave.ID = "btnSave";
            btnSave.Text = "Save";
            btnSave.CommandName = "Save";

            root.Controls.Add(btnSave);

            Button btnCancel = new Button();
            btnCancel.ID = "btnCancel";
            btnCancel.Text = "Cancel";
            btnCancel.CommandName = "Cancel";
            btnCancel.CausesValidation = false;

            root.Controls.Add(btnCancel);

ViewTemplateのコードビハインドでは、ページinitでこのデリゲートを呼び出します。

public Action<JobSiteEntity> SiteChanged;

public override void InitControl() 
{

    if (SiteChanged != null)
            SiteChanged(DataItemTyped); 
}

問題は、動的に追加されたbtnCancelをクリックするとデリゲートがトリガーされますが、そのデリゲートのイベントハンドラーは起動されないことです。

デリゲートの設定をコメントアウトすると、ボタンのイベントハンドラーがヒットします。

私のコードスニペットが最善ではないことは知っていますが、どんなアイデアでもいただければ幸いです。

4

1 に答える 1

1

最善の解決策ではありませんが、デリゲート呼び出しを削除し、ベース ページのメソッドに直接アクセスすることになりました。

if (Page is IJobEntityPage)
        {
            ((IJobEntityPage)Page).SetEditVisibility(DataItemTyped);
        }
于 2013-01-21T16:09:59.157 に答える