- PR -

ASP.NET Dynamic Dataについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/03/17
投稿数: 5
投稿日時: 2008-09-04 09:26
ASP.NET Dynamic Dataについて質問させてください。
Modelフォルダ上に作成したクラスに対して、Dynamic Data
フィールド(ユーザーコントロール)の適用を行いたいのですが、
メタデータにUIHint属性を指定しても、適用されません。
その他ScaffoldColumn属性、Required属性などは問題なく適用できているのですが・・・。
何か原因に心当たりのある方がいらっしゃいましたら
教えてください。

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-09-06 02:17 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-04 11:15
どのようなユーザコントロールが存在していて、どのようにUIHintの部分を記述したのでしょうか?
あなたが何を行ったかをきちんと記述しない限り、アドバイスできる方もいないんじゃないかと思います。
未記入
会議室デビュー日: 2008/03/17
投稿数: 5
投稿日時: 2008-09-04 11:51
どっとねっとふぁんさま早速の書き込みありがとうございます。
また、情報が不足しておりまして申し訳ございません。

とにかくDynamic Data フィールド(ユーザーコントロール)の適用を試したく、
Dynamic Data Web アプリケーション テンプレートから作成した際に、デフォルトで
配置されるBoolean.ascxとBoolean_Edit.ascxの末尾に「X」をいれて上書きし、
クラスファイルに以下のように設定しました。

Private _deleted As Object

<UIHint("Boolean")> _
Public Property deleted() As Object
Get
Return _deleted
End Get
Set(ByVal value As Object)
_deleted = value
End Set
End Property

しかし、動作確認を行うと、deleted列のチェックボックスの後ろに「X」が表示されません。

何か勘違いしておりますでしょうか?

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-09-04 23:55 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-04 14:25
これ、UIHintがなくてもBooleanのコントロールの表示が行われていたところなのでしょうか?
それともUIHintをつけたことでBooleanのコントロールが表示されるようになったのでしょうか。

あと、Boolean.ascxは直接上書きしたんですよね。
手元でためしてBoolean.ascxにXを書き足した場合、うまく表示されていますけど。
未記入
会議室デビュー日: 2008/03/17
投稿数: 5
投稿日時: 2008-09-05 04:43
すみません、間違っていました。
Boolean.ascxを直接上書きした時は、きちんと「X」が表示されました。
これは、UIHintをつけても、つけなくても、同様にきちんと表示されました。
Boolean.ascxをコピーして、末尾に「X」を追加後Bool.ascxとリネームし、
クラスファイルを<UIHint("Bool")> とした場合は、「X」が表示されませんでした。
どうやら、自分でファイルを作った場合がダメなようです。
自分でファイルを作った場合は、何か特別な設定が必要なのでしょうか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-05 13:46
試してみました。

ascx(とascx.cs)をコピーした後、ascx.cs側のクラス名の変更が必要なようです。
具体的には、ascx.csのBooleanFieldというクラス名をBoolFieldに変更します。
そして、ascxの1行目の Inherits="BooleanField" となっているところを Inherits="BoolField" に書き換えます。
これで<UIHint("Bool")>が有効になると思います。
どうやら、ascxの名前というより、クラス名(BooleanFieldかBoolFieldか)で判断しているようですね。

ちなみに、UIHintに存在していないクラス名(たとえば"Borol"とか)を指定すると、その指定は無視され、元のデータタイプから推測されるものが使われるようです。
ascxをコピーしてクラス名を変更していない状態の場合、"Bool"に対応するクラスが存在していないので、元のデータタイプに合わせたBoolean.ascxが利用される、ということのようですね。

[ メッセージ編集済み 編集者: どっとねっとふぁん 編集日時 2008-09-05 13:47 ]
未記入
会議室デビュー日: 2008/03/17
投稿数: 5
投稿日時: 2008-09-06 02:15
どっとねっとふぁんさま、書き込みありがとうございます。

きちんと表示され、解決致しました。
この問題にずっとハマっていたので、助かりました。
ありがとうございます。
なるほど、クラス名で判断されているのですね。
1

スキルアップ/キャリアアップ(JOB@IT)