当创建一个服务器端控件时,会提示自定义的属性不能设置值。
如右图:
三步走:
第一:自定义控件的Class头部装饰以下内容:
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Text"),
ToolboxData("<{0}:ServerButton runat=server></{0}:ServerButton>")]
第二步:
建议对该Assembly进行签名。工程右键有签名选项。
第三步:
web.config里,添加该assembly对应的target
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="kittyway" namespace="kittyway.controls" assembly="kittyway.controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=55cec59b812ec4e2" />
</controls>
</pages>
Webアプリケーション用のカスタムコントロールを作成していると、デザイナを開いたときに以下のようなメッセージがでることがあります。
コントロールの作成中にエラーが発生しました。
~をプロパティ~で設定できませんでした。
例えばこれとかこれをサンプル実装しているときなど。
チュートリアル : カスタム サーバー コントロールの開発と使用
http://msdn.microsoft.com/ja-jp/library/yhzc935f.aspx
ITemplateでコントロールのプレゼンテーションを分離する(前編):CodeZine
http://codezine.jp/article/detail/425?p=1
普通に実行すれば別にきちんと動作するのでいいんですが、デザイナ上で表示されると、カスタムの複合コントロール作っているときなどに困ります。
デザイナ時の挙動にかかわるものだし、何か属性付け忘れてるんだろうなぁと思って、ButtonやGridViewなんかのBCLのメタデータとその属性を見たり、以下のトピックをひたすら試してたんですが、回避できず。。。
カスタム サーバー コントロールのメタデータ属性
http://msdn.microsoft.com/ja-jp/library/ms178658(VS.80).aspx
なんだかんだで、傾向が見つかったのですが、以下のような感じです。
○カスタムコントロールのアセンブリが頻繁にビルドされる環境だと、現象が発生する
※WebFormと同じプロジェクトだったり、別プロジェクトであってもリビルドがかかったり。
正直、開発しづらいんですが、以下のような対処で回避できました。
○アセンブリをGACに登録する(=厳密名つける必要があります。)
○以下のトピックを参考にカスタムコントロールのアセンブリをweb.configで記述する
(既定の構成のようにVersion, Culture, PublicKeyTokenをいれた記述で。)
pages の controls 要素 (ASP.NET 設定スキーマ)
http://msdn.microsoft.com/ja-jp/library/ms164640.aspx
はー。疲れました。