2

aspxファイルではなくweb.configファイルに登録されたユーザーコントロールをロードすることは可能ですか?

これが私がすることの例です。私のaspxで:

index.aspx

<%@ Register TagPrefix="module" TagName="ModExample" Src="~/controls/example.ascx" %>

index.cs

protected void Page_Load(object sender, EventArgs e)
{
    controls_example exmp = LoadContent("controls/example.ascx") as controls_example;
    myContentPanel.Controls.Add(exmp);
}

ページにユーザーコントロールを登録する必要がありました。そうしないと、ASPは「controls_example」が何であるかを認識できませんでした。ただし、web.configを次のように変更できることはわかっています。

<configuration>
    <system.web>
        <pages>
            <controls>
                <add tagPrefix="module" tagName="ModExample" src="~/controls/contentModule.ascx"/>
                <add assembly="Subtext.Web.Controls" namespace="Subtext.Web.Controls" tagPrefix="module"/>
            </controls>
        </pages>
    </system.web>
</configuration>

だから、ここに問題があります。web.configファイルに登録されているときに「controls_example」タイプの変数を作成するにはどうすればよいですか?

する必要がありますか:

  • 「usingnamespace」を追加しますか?
  • web.configに何かを変更/追加しますか?
  • 変数のデータ型を定義していませんか?(私はこれを避けたいです)
  • 他に何かありますか?
4

2 に答える 2

5

あなたweb.configは元気そうです。usingページで、コントロールの名前空間を使用してを追加する必要があります。次に、ページのLoadControlメソッドを使用してコントロールのインスタンスを取得し、それを子コントロールとしてコンテナに追加できます (通常、asp:Placeholderその位置が目的の場所にあることを確認するために a を選択します)。

于 2012-04-07T19:41:34.680 に答える
1

@エイドリアン、これがあなたの質問に対する私の回答です。私はcharの制限をはるかに超えて実行するので、ここでそれを言わなければなりません。

さて、私が最初に抱えた問題は、ASP.NETアプリケーションではなくASP.NETWebサイトを使用していたことでした。私はこれを追いかけたので、後者を使用していました。これにより、それ以降に作成されるすべてのページがデフォルトで名前空間を持つようになりました(それらが含まれていたフォルダーの名前です)。Webサイトに名前空間を使用してコントロールを登録できるかどうかはわかりません。おそらく、Webサイトにはデフォルトで名前空間がないためです。

myControl.ascxそれで、と呼ばれるWebユーザーコントロールを作成し、それをとして保存したとしましょう~/controls/myControl.ascx。ascxファイルを見ると、一番上の行は次のようになっているはずです <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="myControl.ascx.cs" Inherits="myApplication.controls.myControl" %>。はWebサイトの名前であり、それが含まれているフォルダーであるため、名前空間myApplicationに追加してシードできます。また、背後のコードを見ると、名前空間が一致します。controls

ここから、コントロールを登録して使用する方法について2つのオプションがあります。遅い方法は、使用する各コントロールを各ページに登録することです。これは、各コントロールが数個しかない場合に適しています。これを行うには、コントロールを呼び出すページに次の行を記述します(たとえば、インデックスページなど)。

<%@ Register TagPrefix="myC" TagName="myCoolControl" Src="~/control/myControl.ascx" %>

これは遅い方法ですが、機能します(何か間違った入力をしない限り)。

これが私がやろうとしていたことです。これを1000回入力する必要がなく、web.configファイルに1回だけ入力するようにします。

web.config次のようにファイルを構成します。

<configuration>
    <system.web>
        <pages>
            <controls>
                <add tagPrefix="myCont" namespace="myApplication.controls" assembly="myApplication" />
            </controls>
        </pages>
    </system.web>
</configuration>

これにより、「myApplication.controls」名前空間で作成されたコントロールが自動的に登録されます。これは、正しく設定されていれば、「controls」フォルダーで作成されたコントロールです。これを機能させるためにフォルダ「controls」を呼び出す必要はありません。ここにリストされている名前空間があれば、問題なく機能するはずです。

次に、プログラム(インデックスなど)からコントロールをロードするページを開きます。ページの登録に関するものを含め、aspxファイルには何も書き込みません。コントロールはすでに登録されているので、コードビハインドにロードするだけです。

myControl myCont = LoadControl("~/controls/myControl.ascx") as myControl;
//feel free to use the variable, or add it to the page with a panel or something

これがあなたの質問に答えてくれることを本当に願っています。それを機能させるには、私の側で少し掘り下げる必要があったので、この問題で他の人を助けてうれしいです。私を正しい方向に導いてくれたCyber​​Dudeに改めて感謝します。

于 2012-05-11T20:14:21.803 に答える