ユーザーコントロール(ASCX)でユーザーコントロールを作成する
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>
関連
-
react error TypeError: 未定義のプロパティ 'setState' を読み取ることができません。
-
Uncaught TypeError: Node' の 'removeChild' の実行に失敗しました: 1 つの引数が必要ですが、0 つしかありません。
-
Oracle の例外 ORA-01861 を解決する: リテラルが形式文字列に一致しません。
-
Pytorch が Python int が大きすぎて C の long に変換できないというエラーを報告する
-
輸出が定義されていない
-
予期しないトークン付近の構文エラー 脚注のエラー解決
-
unity build はエラーを報告します。 名前 'XXX' は現在のコンテキストに存在しません。
-
Xcode は、実行中に Thread 1: EXC_BAD_ACCESS (code=1) に遭遇しました。
-
android.intent.action.MAIN と android.intent.category.LAUNCHER を理解する。
-
AttributeError: モジュール 'sys' には 'setdefaultencoding' という属性がありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラーです。アクセス制限です。タイプ 'OperatingSystemMXBean'はAPIではありません(必要なライブラリに制限があります)。
-
未定義のエラーのプロパティ 'replace' を読み取ることができません。
-
原因:java.io.IOException。CreateProcess error=5, アクセス拒否されました。CreateProcess error=2, システムが指定されたファイルを見つけられませんでした。
-
MySql ERROR 1046(3D000): 選択されたデータベースがない場合の解決策
-
不完全な型へのエラーメンバーアクセス
-
解決方法: 'chromedriver' 実行ファイルが PATH に存在する必要があります。
-
Pythonがエラー 'urllib' に 'urlretrieve' という属性がないとプロンプトを出す?
-
(2019.8.16に解決) urllib.error.URLError: urlopen エラー [Errno 11001] getaddrinfo に失敗しました。
-
numpy.concatenate merge matrix エラー ValueError: すべての入力配列は同じ次元数でなければなりません。
-
inet_pton()およびinet_ntop()関数の説明