0

シンプルな ASP.NET フォームを持つ SharePoint Web パーツを作成しています。コントロールをレンダリングするために HtmlTextWriter を使用しています。私が抱えている問題は、割り当てた EventHandler をボタンがトリガーしていないように見えることです。

最初に CreateChildControls メソッドでボタンを宣言し、イベント ハンドラーを配線しました。

{
    Button submitButton;
    submitButton = new Button();
    submitButton.Text = "Go!";
    submitButton.Click += new EventHandler(submitButton_Click);
    Controls.Add(submitButton);
}

「submitButton_Click」EventHandler の機能を宣言しました。

void submitButton_Click(object sender, EventArgs e)
{
    submitButton.Text = "Good!";
}

コントロールをレンダリングします。

protected override void RenderContents(System.Web.UI.HtmlTextWriter output)
{ 
        RenderChildren(output);
}

最後に、Web パーツを展開します。カタログに問題なく表示され、ページに追加するとコントロールが表示されます。ただし、ボタンをクリックすると、そのテキストが「Go!」に変わるはずです。良く!" 代わりに、何もしません。私はこれらすべてのテクノロジ (C#、Sharepoint、ASP.NET) にかなり慣れていないので、理解に問題があると確信していますが、ネット上の記事や以前の質問とは異なる手順を試してみてください。私の問題は解決しません。ご覧いただきありがとうございます。

編集: Web パーツを含む SharePoint ページを開き、ボタンは次のように作成されました。

<input type="submit" name="ctl00$PlaceHolderMain$ctl00$ctl04" value="Go!" />

OnClick 値がまったく追加されていないように見えます。これは、EventHandler を追加することでできると思っていたことです。OnClick を完全に間違った方法で追加しようとしていますか? また、ボタン名がコードで宣言したものと一致しない理由もわかりません。

4

4 に答える 4

3

このリンクを見てください:

http://msdn.microsoft.com/en-us/library/ms452873.aspx

RenderContents メソッドを誤ってオーバーライドし、クリック イベントを間違った場所に配線しています。

于 2009-11-20T19:23:01.533 に答える
1

System.Web.UI.WebControls.WebParts.WebPart または SharePoint WebPart から継承していますか (申し訳ありませんが、名前空間を思い出せません)。「System.Web.UI.WebControls.WebParts.WebPart」から継承することをお勧めします。これにより、単純な ASP.NET Web パーツになり、SharePoint でも使用できるようになります。

そのクラスから継承したら、私がいつも行っている「Render」メソッドをオーバーライドする必要があり、うまくいきます。あなたの CreatechildControls メソッドは正しいと思います。したがって、Render メソッドは次のようになります

protected override void Render(System.Web.UI.HtmlTextWriter output)
{ 
        submitButton.RenderControl(write);
}

また、"CreateChildControls" メソッドの外でボタンを宣言する必要があります。

  1. System.Web.UI.WebControls.WebParts.WebPart から継承
  2. WebPart で使用されるすべてのコントロールを宣言し、「CreateChildControls」、「OnInit」、および「Render」のメソッドをオーバーライドするために使用される部分クラスを作成します。

それが役に立てば幸い。

于 2009-11-22T21:52:10.403 に答える
0

代わりに CreateChildControls オーバーライドを使用してください。これは、ASP.NET コントロール レンダリング パイプラインで適切なタイミングで呼び出されます。

于 2009-11-21T05:06:32.670 に答える
0

同様の問題がありました。イベント ハンドラーは常に起動していました。SharePoint ページのビュー ソースを確認したところ、レンダリングされた HTML コントロールが入力タイプ = 送信であることがわかりました。この問題を解決するために、コードで「button.UseSubmitBehavior = false」を設定し、ID を設定しました。コードで設定されていない場合、ASP.NET 2.0 の既定の UseSubmitBehavior は true です。

于 2010-01-11T21:05:53.393 に答える