2009-05-05 73 views
2

Webサイトを公開しようとすると問題が発生します。 私はvisual studio 2008 sp1にいます。ASP.netユーザーコントロールの名前空間名が見つかりません

私はユーザーコントロールの束を持っており、いくつかのページで私はそれらをプログラム的に使用しています。

私は私がページに移動すると、それが正常に動作しますが、私は後藤公開時

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

を使用behingコードに続いてASPXページの参照に

<%@ Reference Control="~/UserControls/Foo.ascx" %> 

を持って

私はコンパイル時のエラーを取得するウェブサイト。

+0

あなたのウェブサイトは構築されていますか? – Cerebrus

答えて

5

ああ、私は同じ問題で開発時間を吹き飛ばしています。誰にもこれに対する解決策がありますか?

ところで:それはあなたが、「このプリコンパイルされたサイトが更新可能であることを許可する」(ウェブサイト上で右クリックし、プロパティページを選択し、MSBuildのオプション)のチェックを外した場合のビルド

しかし、私はサイトを更新可能にする必要があります。

+0

1+、私は過去に、同じ問題を抱えていました。私はそれを解決できなかったので、私は反射を使用しました。私もこの問題を解決する方法を知りたいです。 – Cleiton

0

特定の種類が利用できない場合があります。

Control control = Page.LoadControl("~/UserControls/Foo.ascx"); 
0

はい、私はそれをControlにキャストすることができます。しかし、私はusercontrolのメソッドへの直接アクセスを失う。

私はコントロールに反映することでメソッドにアクセスできることを知っていますが、これを成功させましたが、サイト上の他のすべてのコントロールにアクセスするのは理想とは限りません。

また、追従誤差はそれが私は基本的にサイト全体をXCOPY場合、私は両方のローカルおよびサーバー上で正常にサイトを実行することができますユーザーコントロールのマークアップに

<%@ Register src="CategoryRows.ascx" tagname="CategoryRows" tagprefix="abc" %> 
<abc:CategoryRows ID="CategoryRows" runat="server" /> 

注意を見つける傾けることです(ソースコードとすべて)。しかし、パブリッシュは失敗します。

+0

Riaz、「固定命名と単一ページアセンブリを使用する」というWebサイトを公開していますか? – Cleiton

+0

"固定命名と単一ページアセンブリを使用する"の両方をチェックしてチェックを外してみました。 ( "このプリコンパイルされたサイトを更新可能にする"の両方がチェックされています) 同じエラーが表示されます: "名前空間 'some_user_control_ascx'の型または名前空間が 'ASP'という名前空間に存在しません?) " –

2

私はこの同じ問題を抱えていました。私の場合は、コンパイルして自分のウェブサイトを構築することができましたが、自動ビルドを行うとすばらしいことになります。

次のようにコードを交換してみてください:

USERCONTROLS_Foo newFoo control = (USERCONTROLS_Foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

(資本金はあなたのディレクトリ名/コントロール名を大文字にする方法に基づいています - しかし、いずれの場合においても、適切に強調表示する必要があります) 。

0

ユーザーコントロールをキャストすると、多くの問題が発生する可能性があります.myのアプローチは、キャ​​スト後に必要なすべてのプロパティとメソッドを配置し、このクラスをSystem.Web.UI.UserControlから継承します。 System.Web.UI.UserControlユーザーの代わりに、このコントロールクラスのユーザーのcotrolコードファイル。

このクラスでのみキャストキャストが必要な場合に使用します。それは軽量鋳造でもあります。

+0

動的に読み込む必要がある場合は、これはユーザが十分ではありません。 動的に読み込むには、Page.LoadControlが必要です.Controlを返すだけです。 もし私がすべての私のページを別のusercontrolsを読み込む能力を指定するために派生しなければならないなら。 –

+0

コントロールが動的に追加されても。私たちはいつもコントロールを基本クラスにキャストできます。 '-------------------------- ctrl = Page.LoadControl( "〜/ DashBoardControl/BroadCastView.ascx") PlaceHolder1.Controls。 Add(ctrl) DirectCast(ctrl、BraodCastView) を使用していない場合Ctrlキーを押しても表示されない場合 '----------------------------- -------------------- ここでは、BraodCastViewはBroadCastView.ascxの基本クラスです。 これは決して失敗しません。 – ratnesh

1

解決策を見つけました。私がユーザー定義の名前空間でコントロールを宣言する場合、ASPを使用せずにコントロールを直接使用することも、aspxページに参​​照することもできます。

0

確認してください:

をごwebsite.publishprojファイルを持っていますか?
存在する場合は、削除してもう一度やり直してコードを公開してください。

関連する問題