1

ユーザー コントロールがその「コンテキスト」またはその親 .aspx ページを何らかの方法で決定することは可能ですか?

現在、一般的な .aspx ページで次のように宣言されているユーザー コントロールがあります。

<%@ Register TagPrefix="uc1" TagName="ManageTitle" Src="../UserControls/ManageTitle.ascx" %>

ユーザー コントロールは現在、次のようにテキスト ボックスを生成します。

<asp:textbox id="txtTitle" runat="server" MaxLength="60"
ToolTip="Describe the item with a short pithy title - most important keywords first"/> 

この .ascx ファイルの page_load は現在、次のようになっています。

Me.txtTitle.Text = SetPageTitle()

この Web アプリにはこれが必要な場所 (つまり、エンド ユーザーが「タイトル」を入力できるテキスト ボックス) がありますが、「タイトル」情報を「読み取り専用」で表示したい場所もあります。たとえば、テキスト ボックスではなく、ラベル コントロールまたは Enabled="false" のテキスト ボックスを使用して、データ入力を防ぐことができます。

この小さな .ascx ファイルのクローンを作成し、その名前に _RO.ascx などのサフィックスを追加できると思いますが、最善の方法は何でしょうか。

要するに、ユーザーコントロールは、それを宣言するページからある種の「コンテキスト」を取得できますか、またはこの種のことを達成するためのより良い方法はありますか? ありがとうございました。

-- 提案されたアプローチで更新を編集 --------------------------

UserControl に追加されたコード:

Private mIsReadOnly As Boolean

Public Property IsReadOnly() As Boolean
    Get
        IsReadOnly = mIsReadOnly
    End Get
    Set(ByVal value As Boolean)
        mIsReadOnly = value
    End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Page.IsPostBack Then
        'Leave the textbox alone
    Else
        Me.txtTitle.Text = SetPageTitle()      'This is the original code
        If IsReadOnly Then
            Me.txtTitle.Enabled = False
        Else
            Me.txtTitle.Enabled = True
        End If
    End If
End Sub

UC を呼び出す親に追加されたコード:

<uc1:ManageTitle id="ManageTitle" 
    IsReadOnly="True" runat="server">
</uc1:ManageTitle>
4

3 に答える 3

3

一般的なパターンに従う場合は、.ascx コントロールでパブリック プロパティを (コード ビハインドで) 公開し、それを含むページがその状態をプログラムで設定できるようにします。値が利用可能な状態の列挙型 (読み取り専用、編集可能など) である State プロパティを作成できます。

于 2010-03-08T23:18:28.423 に答える
1

これは前の質問に似ています。私の答えには、これを行う方法を示すリンクと、より「標準的な」代替アプローチがあります

カスタム コントロールの Visual Studio.NET で現在開いている ASP ページのファイル名を取得できますか?

于 2010-03-08T23:16:51.623 に答える
0

はい、コントロールはそのコンテキストにアクセスできます。たとえばMe.Page、ページにアクセスするために (これが VB.NET で行われていることを願っています) を使用します。

このアプローチの問題は、コントロールが既知のコンテキストでのみ機能するため、コントロールの再利用性が低下することです。おそらく、依存関係を切り替える方が良いでしょう。つまり、ページ/親コントロールがコントロールのGetPageTitle()メソッドを呼び出し、戻り値で適切なことを行う必要があります。

于 2010-03-08T23:19:32.727 に答える