none
WEBカスタムコントロールの作成について RRS feed

  • 質問

  • 初投稿になります。

    よろしくお願いいたします。

    なんらかの不備等があれば ご指摘いただけたらと思います。

     

    さっそく質問なのですが

    VS2005で あるテキストボックスの入力を ラベルに反映させるWEBカスタムコントロールを作成しようとしています。
    一通りの想定した処理はできるようになったのですが(自分で作っておいて何ですが)疑問に感じる部分があり質問したいのです。

     

    基本的に描画はRenderContents をオーバーライドした部分で描画をしているのですが、このタイミングでページに対してクライアントスクリプトブロックを吐き出そうとしても既にページ側のレンダが終わっているのかクライアントスクリプトが吐き出されないようなのです。
    (もちろん勘違いの可能性もありますが・・・・)

     

    その為、現在はOnPreRender をオーバーライドしてその中でクライアントスクリプトの出力を行っているのですがこれは適切なのでしょうか?

    流れ的にOnPreRenderでは以下のような処理を行っています。

     

    Page.RegisterClientScriptBlock でTextBoxの内容をラベルに反映するJavaScriptの関数を出力

    PageのあるTextBoxオブジェクトを取得

    TextBoxのクライアント側OnkeyUpイベントで上記で作成した関数を呼ぶように設定

     

    またTextBoxはIDをString型のプロパティで受取り、PageのFindControlで取得しています。

     

    以上になります。
    説明が下手で申し訳ないのですが、お分かりになる方がいらっしゃったらご教授願えませんでしょうか?

    2008年7月30日 2:09

回答

  •  たると さんからの引用

    基本的に描画はRenderContents をオーバーライドした部分で描画をしているのですが、このタイミングでページに対してクライアントスクリプトブロックを吐き出そうとしても既にページ側のレンダが終わっているのかクライアントスクリプトが吐き出されないようなのです。
    (もちろん勘違いの可能性もありますが・・・・)

     

    おっしゃられている通り、RenderContents でRegisterClientScriptBlockを実行しても、

    JavaScriptの内容が吐き出されないです。

    言い方を変えると、OnPreRenderより前の段階で行う必要があります。

     

    また、OnPreRender でJavaScriptの書き出しを行っても良いのですが、

    作成中のコントロールに特に問題がないのであれば、OnInitやOnLoadで、RegisterClientScriptBlockを実行しても

    良いのかなと思います。

    そこは作っているコントロールの機能や仕様によっても左右されるので、

    こうしなさい というものはないのですが、ケースバイケースですね。

     

    それから、本件とは関係ないのですが、VS2005(.NET Framework 2.0) では、

    Page.RegisterClientScriptBlock ではなく、ClientScriptManager.RegisterClientScriptBlock を使う方を

    推奨されていたと思いますので、できるのであれば、ClientScriptManager.RegisterClientScriptBlock を使って下さい。

    http://msdn.microsoft.com/ja-jp/library/btf44dc9.aspx

     

    宜しくお願いします。

    2008年7月30日 16:17

すべての返信

  •  たると さんからの引用

    基本的に描画はRenderContents をオーバーライドした部分で描画をしているのですが、このタイミングでページに対してクライアントスクリプトブロックを吐き出そうとしても既にページ側のレンダが終わっているのかクライアントスクリプトが吐き出されないようなのです。
    (もちろん勘違いの可能性もありますが・・・・)

     

    おっしゃられている通り、RenderContents でRegisterClientScriptBlockを実行しても、

    JavaScriptの内容が吐き出されないです。

    言い方を変えると、OnPreRenderより前の段階で行う必要があります。

     

    また、OnPreRender でJavaScriptの書き出しを行っても良いのですが、

    作成中のコントロールに特に問題がないのであれば、OnInitやOnLoadで、RegisterClientScriptBlockを実行しても

    良いのかなと思います。

    そこは作っているコントロールの機能や仕様によっても左右されるので、

    こうしなさい というものはないのですが、ケースバイケースですね。

     

    それから、本件とは関係ないのですが、VS2005(.NET Framework 2.0) では、

    Page.RegisterClientScriptBlock ではなく、ClientScriptManager.RegisterClientScriptBlock を使う方を

    推奨されていたと思いますので、できるのであれば、ClientScriptManager.RegisterClientScriptBlock を使って下さい。

    http://msdn.microsoft.com/ja-jp/library/btf44dc9.aspx

     

    宜しくお願いします。

    2008年7月30日 16:17
  • こんにちは。中川俊輔 です。

     

    けろ-みおさん、回答ありがとうございます。

     

    たるとさん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    有用な情報と思われたため、けろ-みおさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。

    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    たるとさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年8月13日 9:45