プロジェクトがあり、ページにカスタムサーバーコントロール(.ascx
ファイルがない)を登録しようとしています。私は現在使用しています
namespace MyApp.Controls{
public class CustomControl: WebControl{
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
私のページでは、
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />
"Unknown server tag 'myControls:CustomControl'。"というメッセージとともにパーサーエラーを受け取ります
何が悪いのですか?
このコントロールが別のクラスライブラリにある場合、または同じコントロールにある場合でも、@ Registerでコントロールのアセンブリを指定しても問題ありません。
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
<myControls:CustomControl runat="server" Text="What's up!" />
すべてが正しくコンパイルされていることを確認するために、ソリューションもクリーンアップして再構築してください!
コントロールが複数のページで再利用される場合、影響を受けるすべてのページに同じ<@Registerタグをコピーして貼り付けるのではなく、system.web/pages/controlsサブ要素の1つとしてweb.configに登録することをお勧めします。
web.config:
<system.web>
<pages ...>
<controls>
...
<add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" Assembly="Whatever"/>
</controls>
thepage.aspx:
<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
コントロールをApp_Code
フォルダーの下に配置するか(コントロールがアセンブリにない場合)、このコントロールがあるアセンブリへの参照を追加する必要があります。
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
Assembly="SomeAssembly" %>
しかし、推測では、コントロールはApp_Code
フォルダの下にありません。
Register属性にAssembly属性を追加する