1. ホーム

ユーザーコントロール(ASCX)でユーザーコントロールを作成する

2022-02-24 03:45:11

ascxA、ascxBという2つのascxを作成しました。
ascxAには、PlaceHoldを入れました。
ascxBにtextBoxが配置される
page_loadでascxAが動的に5つのascxBを作成しますが、ページには何も表示されません"。
これはフォーラムユーザーからの質問で、Insus.NETはこの質問のデモ例を作り、メソッドとヒントを共有します。

 サイト上にユーザーコントロールascx Bを作成し、このコントロールにTextBoxを引きます。
別のユーザーコントロール、ascx Aを作成します。このユーザーコントロール上に、テキストボックスと、ユーザーがテキストボックスにデータを入力してアンモニウムボタンをタップできるようにするボタンを引き、それによって、ascx A ユーザーコントロールのページでレンダリングされる ascx B ユーザーコントロールを動的に生成します。
サイト上に、aspxページを作成します。ユーザーコントロールascxをaspxページに参照させます。そして、aspxページ上にボタンを引きます。ユーザーにこのアンモニウムボタンをクリックさせ、aspxページに表示されている動的に生成されるテキストボックスの値を取得させます。
今の問題は、ascx Aが、ユーザーが入力した番号に基づいてascx B.を動的にロードして生成していることです。
これらの動的に生成されるテキストボックスの値をaspxページで取得するにはどうしたらよいでしょうか?
なるほど、ステップバイステップの質問で完成させる。
Insus.NETで.NET 4.0とC#をプログラミング言語として使用し、サイトを作成します。
AscxB.ascxユーザーコントロールを作成します。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxB.ascx.cs" Inherits="AscxB" %& gt;
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

表示コード


AscxB.ascx.csです。

using System;
Generic;
Linq;
Web;
UI;
WebControls;

public partial class AscxB : System.Web.UI.
UserControl {
    protected void Page_Load(object sender, EventArgs e)
    {

    }       
}

表示コード

 サイト上にユーザーコントロール AscxA.asx を作成し、このコントロール上にテキストボックス TextBox、アンモニアボタン、コンテナ PlaceHolder を引き出します。アンモニアボタンに onclick イベント OnClick="ButtonGenerate_Click" を追加します。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxA.ascx.cs" Inherits="AscxA" %& gt;
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="ButtonGenerate" runat="server" Text="Generate" OnClick="ButtonGenerate_Click" /><br />
<br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

表示コード


AscxA.ascx.csです。

using System;
Generic;
Linq;
Web;
UI;
WebControls;

public partial class AscxA : System.Web.UI.
UserControl {  
    protected void Page_Load(object sender, EventArgs e)
    {
      
    }

    protected void ButtonGenerate_Click(object sender, EventArgs e)
    {
       
    }   
}

表示コード

ここでは、ユーザーコントロールascx aからascx bをロードできるようにするために、ユーザーコントロールを動的にロードする方法を説明します。Insus.NETでは、まず、インターフェースを作成します。

インターフェイスが書かれたので、ascx Bに行き、このインターフェイスを実装してください。

ユーザーコントロールのascxA csのコードページに戻って、ボタンのクリックイベントを書いてみましょう。


上の画像にある29行のコードは、ファイルボックスが空で数字でないかを判断するためのものです。
35行目は、ユーザーコントロール ascx B を動的に読み込んで、インターフェース IUserControlable にした後、PlaceHolder コンテナに追加して行くコードです。
ここで、Web page.aspx を作成し、ユーザーコントロール ascxa を参照し、ammonium ボタンと Literal コントロールを引き込みます。アンモニウムボタンとLiteralは最初は非表示で、主にデータの取得と表示に使用されます。

.aspx.csのコードです。

using System;
Generic;
Linq;
Web;
UI;
HtmlControls;
UI.WebControls;


public partial class DynamicallyLoadUserControlDemo : System.Web.UI.
UI.
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }

    protected void ButtonGetValue_Click(object sender, EventArgs e)
    {        

    }   
}

表示コード


つまり、Ascx Aユーザーコントロールにおいて、動的に生成されたAscx Bコントロールがある場合、ウェブページのボタンは表示されるだけです。もし、アンモニアボタンが生成されていなければ、ウェブページのボタンは隠されるだけです。
コントロールが生成されているかどうかはascx Aのユーザーコントロールで起こっており、隠されたオブジェクトはWebページ上にあるため。このため、ユーザーコントロールとWebページとの間の通信や連携が必要になります。
プログラムの複雑さを軽減するために、Insus.NETは本体が書き込み専用のプロパティを1つだけ持つインターフェースを書かなければならない。

インターフェイスが書かれているので、このインターフェイスを web.aspx.cs で実装します。はっきり言って、ウェブページのアンモニアボタンは表示と非表示を受け付けるだけで、誰が表示と非表示を決めても構わないのです。

具体的に誰が表示・非表示を制御しているのでしょうか?先ほども言ったように、ユーザーコントロールascx Aの動的に生成されるascx Bの後に表示されるのは、このページのButtonである。そこで、ユーザーコントロールascx Aの生成されたコントロールのコードに行き、追加します。

ちょっと質問なんですが、Webページをインターフェースにするにはどうしたらいいのでしょうか?というのも、上記ではWebページをIShowableのインターフェイスとして実装しています。
OK、ページcsに戻り、データを取得するためのアンモニアクリックイベントを書く準備ができました。しかし、動的に生成されたコントロールはすべてユーザーコントロール ascx A でレンダリングされ、レンダリングされた各テキストボックスは ascx B からなので、データを取得するのは少し難しいです。
ロシア語ユーザーコントロールのascx AコンテナのPlaceHolderをWebページで取得するにはどうすればよいですか?Insus.NETはインターフェースしか使わないので、ユーザーコントロールのAscx AのPlaceHolderを読み取るために、Webページ.aspx.csのための別のインターフェースを書いた方がよいでしょう。

このインターフェイスをユーティリティ化するために、ユーザーコントロールのascx Aに行く。

こうすることで、web.aspx.csのget value ammoniumボタンで、このコンテナを取得することができます。また、コンテナは一度に複数の ascx B ユーザーコントロールを生成する可能性があるため、ユーザーのニーズによっては、複数存在する可能性があります。どのテキストボックスTextBoxなのかを知るにはどうしたらいいのでしょうか?
というインターフェイスを書いたほうがいい。

インターフェイスが書けたので、ascx Bユーザーコントロールにインターフェイスを実装してみましょう。

ここまでで、Webのコードに、アンモニアボタンのクリックのイベントを書いて、値を取得することができます。

上のコードでは、#0がプレースホルダーコンテナを取得しています。
#1は、すべてのテキストボックスが入ったforeachコンテナです。
#2は、表示用テキストボックスの値です。
この時点で、デモは一応終了です。しかし、最終的な結果を示すデモをしてみましょう。

デモのソースコードです。
http://download.cnblogs.com/insus/ASPDOTNET/Ascx_load_ascx_page_getvalue.rar


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"& gt;</script>