2009-03-13 16 views
2

だから私は持っているプロジェクトで働いているすべての(非常に清潔で整然とらしい)user controls registered in its web.config file動的に追加するユーザーコントロールは、web.configファイルに登録さ

(ここでの問題が来る)しかし私がこれまでのところは良いですユーザーコントロールを動的に作成してページに追加しようとしています。これらのユーザーコントロールは、処理が必要なイベントを発生させます。

通常は問題ありません: コントロールをページに登録し、コントロールをロードし、正しいタイプにキャストし、イベントハンドラを割り当て、ページに追加して、魔法が起こる、簡単にピーシー。

しかし、コントロールがweb.configに登録されている場合、コントロールのタイプを参照できません。これは、キャストなしという意味で、イベント処理を意味しません。

デザイン時にページにusercontrolを追加すると、奇妙なことに型を参照できます。

これを回避する方法が必要です(ページにコントロールを登録したり、設計時にコントロールを追加する必要はありません)、何が欠けていますか?

答えて

2

それはしばらくしているが、私プロジェクトがWebアプリケーションであり、Webアプリケーションでない場合、このタイプの動作をASP.NETで見たと思います。私が覚えている限り、Webサイトは各ページを独自のアセンブリにコンパイルし、一般的な名前空間はなく、設定に関係なく、<%@ Register%>ディレクティブが必要です。そうしないと、アセンブリ参照がないという正確なエラーが発生します。奇妙なことだ

私は確かにテストする必要があります...

+0

各ページをコンパイルするウェブサイトについては、自分のアセンブリに当てはまるでしょう。 web.configにコントロールを登録する場合は、それが問題ありません。しかし、コントロールを別のアセンブリで定義して機能させる必要があるかもしれません。職場では、ウェブサイトプロジェクトでtelerikのコントロールを使用していますが、うまくいきます。 – Martin

+0

あなたは絶対に正しいです。ちょうど簡単なテストをしました。それはWebアプリケーションで正常に動作し、Webサイトで惨めに失敗しました。ありがとう! –

0

言って:

を「あなたは、設計時にページにユーザーコントロールを追加する場合は、タイプを参照することができます」あなたはそれがページの上部に登録%>ディレクティブ@ <%が追加されます意味しますか?

また、ソースドキュメントに/ imports(c#/ vb.netを使用しているかどうか)節を追加していますか?

コントロールタイプにキャストできるようにするためには、通常、コードバインド内の名前空間をインポートする必要があります。多分、これは欠けているものです。

+0

いいえ、登録はweb.configファイル()で行うので、<%@%を登録の必要はありませんされて>の指示に従います。ページ上でユーザーコントロールをドラッグすると、すべてが動作し始めます(<%@ Register%>またはインクルードを追加しません) –

0

< web.configのセクションと<%@ Register%>ディレクティブは同じものです(web.configのエントリはアプリケーション全体に適用されます)。 Webフォームにデザインタイムコントロールを追加することができます。

コントロールをページに動的に追加する場合は、LoadControl関数を使用してコントロールのインスタンスを取得します。 「ヘッダー」のクラス名を持つコントロールを考えると、次のように、コントロールをロードするプロパティを設定し、という名前のフォームにコントロールを追加し、「Form1のを」します:

Dim head As Header = LoadControl("~/Controls/Header.ascx") 
    head.Text = "Some text..." 
    Me.form1.Controls.Add(head) 
+0

これはまさに私が期待したものですが、 "(ヘッダーコントロール用のタグをページに追加すると奇妙なことになりますが、]うまく動作します!) –

関連する問題