1

コンテキスト: ASP.NET 3.5 / C#

やあ、

ユーザーコントロールを作成しました

public partial class MyControl : UserControl
{
    // EDIT: example first used "UniqueId" as property name, which was wrong.
    public Guid MyId { get; set; }
    // ...
}

そしてこの使用例

<uc1:MyControl 
    ID="myControl" 
    MyId="443CBF34-F75F-11DD-BE2F-68C555D89123"
    runat="server" />

手順:

  • このコントロールを Web フォーム (aspx) に追加します。

期待される結果:

  • ユーザー コントロールの HTML が追加され、MyId の一意の値 (Guid.NewGuid() に対応する) が、設計時に MyId 属性値として ASPX HTML に設定されます。

実結果:

  • ユーザー コントロールの HTML が追加され、設計時に MyId 属性値の HTML に MyId の一意の値が設定されません。

これが不可能な場合:

  • 回避策 1: サーバー コントロールを使用してこれを実現することは可能でしょうか? どのように?
  • 回避策 2: UserControl デザイン モード タスクを使用してこれを実現することは可能ですか?

説明:

  • プロパティ値はコントロール インスタンスに対して変更されることはなく、aspx ページのコントロール宣言を通じて ASP.NET によって自動的に設定されるため、プロパティ値を永続化することは問題ではありません。
  • MyId 属性は、実行時にレンダリングする必要はありません。

GrB!

4

4 に答える 4

1

Visual Studio .NET のカスタム デザインタイム コントロール機能

于 2009-11-05T19:43:31.167 に答える
0

あなたの質問を正しく理解できれば、MyId というユーザー コントロールのプロパティを公開していることになります。これにより、そのコントロールを配置した場所にプロパティを設定できます。

また、レンダリングされた HTML にこの属性と値を含めることも必要です。

その場合、プロパティ MyId は HTML に渡されません。これは、ユーザー コントロールがプロパティとして MyId を持っているため、デザイナーに表示されます。

ユーザー コントロールで、レンダリングされるマークアップを定義します。たとえば、次の場合:

<asp:Panel runat="Server" Id="myControlDiv">Some other content</asp:Panel>

その後、コントロール prerender イベント (または選択した他の場所) に置くことができます

myControlDiv.Attributes.Add("MyId", SomeGuid.ToString())

次に、HTMLで次のように出力されます

<div id="generatedID" MyID="443CBF34-F75F-11DD-BE2F-68C555D89123">Some other content</div>
于 2009-02-16T14:28:11.000 に答える
0

ここにはいくつかの問題がありますが、最初に回避策に関する質問にお答えします。

  1. いいえ、既にサーバー コントロールを使用しています。
  2. 設計モードは、開発者の生活を楽にするだけのものではなく、他には何の影響もありません

ここで 2 つの問題があります。UniqueIDあなたがそれをオーバーロードしようとしていたかどうかわからないというプロパティがすでにありますが、質問は明確ではありませんでした。2 つ目の問題は、UniqueID が基本的にどこにも保存されないことです。次のコードを試してください。

public Guid UniqueId {
    get { return (Guid)ViewState["MyUserControlUniqueId"]; }
    set { ViewState["MyUserControlUniqueId"] = value; }
}

これにより、ポストバックで取得できるように、GUID が ViewState に格納されます。

更新:コメントを指定すると、このメソッドをオーバーライド/使用して、レンダリングされたコンテンツに属性を追加する必要があります。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.addattributestorender.aspx

于 2009-02-12T14:20:55.400 に答える
0

では、設計時にのみ使用する一意の ID を生成したいだけですか?

Object.GetHasCode(); をオーバーライドしない理由

そして、これをプロパティとして公開しますか?

于 2009-03-03T01:31:21.180 に答える