2

ASP:Literal を介してレンダリングされている動的ボタンがあります。

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);

Button btnOpenFile = new Button();
btnOpenFile.ID = "BtnOpenFile-" + additionalReadingFileID;
btnOpenFile.Text = "Open";
btnOpenFile.CssClass = "SettingsChangeButton";
btnOpenFile.Click += new EventHandler(OpenFileInLocation);
btnOpenFile.RenderControl(writer);

writer.Close();
sw.Close();
this.LitAdditionalReadingContent.Text = sb.ToString();

クリックイベントに追加されているメソッドは

protected void OpenFileInLocation(object sender, EventArgs e)
{
    //  Change Selected ID to this one
    Button clickedLink = (Button)sender;
    int fileID = Convert.ToInt32(clickedLink.ID.Replace("BtnOpenFile", ""));

    IRPBestPracticeTopicAdditionalReadingFile myOpenFile = new IRPBestPracticeTopicAdditionalReadingFile(fileID);
    System.Diagnostics.Process.Start(@myOpenFile.FilePath);
 }

これは、ASP ページにボタンを追加し、クリック イベントをページ ロード メソッドのボタンに割り当てると機能しますが、リテラルを介してレンダリングされる動的に作成されたボタンに割り当てると登録されないようです。

誰かが理由を知っていますか?そして、この問題に対する簡単な解決策はありますか? 前もって感謝します。

4

2 に答える 2

0

これは、イベントがバインドされるようにコントロールを再構築していないために発生しています。ロード時にコントロールを再構築し、それが属するコントロール階層に追加して、イベントをバインドして起動できるようにするには、Load十分な情報をキャッシュする必要があります。

于 2013-12-18T16:28:25.010 に答える