博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

自定义控件-不能设置属性

Posted on 2009-12-31 10:13  懒人ABC  阅读(363)  评论(0编辑  收藏  举报

当创建一个服务器端控件时,会提示自定义的属性不能设置值。

如右图:080918.png

三步走:

第一:自定义控件的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
080918.png

普通に実行すれば別にきちんと動作するのでいいんですが、デザイナ上で表示されると、カスタムの複合コントロール作っているときなどに困ります。
デザイナ時の挙動にかかわるものだし、何か属性付け忘れてるんだろうなぁと思って、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

はー。疲れました。