🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

8500閲覧

ASP.NETにて.aspxからユーザーコントロール(.ascx)にデータをセットしたい。

pentagon

総合スコア11

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/03/10 03:02

編集2021/03/10 05:22

前提・実現したいこと

ASP.NETにて.aspxからユーザーコントロール(.ascx)にデータをセットしたい。

mainのWebRyohi.aspxにユーザーコントロール(WebRyohiControl1.ascx)が張り付けて有り
WebRyohi.aspxでデータを読み込みその内容をWebRyohiControl1.ascxの中のテキストに表示したいのですが
uc1.Shuku_T = "BBB" と代入しようととているのですが uc1.xxxのuc1が参照エラーになります。

OS: Windows10
Visual studio 2010
NET-FRAMEWORK 4.0

発生している問題・エラーメッセージ

ユーザコントロールにデータをセットしようとしているのだが
構文がエラーになります。

ASPX.VB

1Imports System.Data.SqlClient 2 3Public Class WebRyohi 4 Inherits System.Web.UI.Page 5 Private Property uc1 As WebPartList.WebRyohiControl1 6 7 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 8 NAME.Text ![イメージ説明](d3bc89f70555b616ddd2f2e58bc875a6.png)" 9 uc1.Shuku_T = "BBB" <------ **プロテクトの為アクセスできません。 エラーになります。 10 (uc1は宣言されていません。 エラーになります) 11** End Sub 12 13End Class

ASPX.デザイン

1<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebRyohi.aspx.vb" Inherits="WebPartList.WebRyohi" %> 2 3<%@ Register src="WebRyohiControl1.ascx" tagname="WebRyohiControl1" tagprefix="uc1" %> 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6 <form id="Form1" method="post" runat="server" DefaultFocus="SRART_YMD" > 7 <asp:Label ID="NAME" runat="server" Text="Label"></asp:Label> 8</html> 9

ASCX.デザイン

1<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="WebRyohiControl1.ascx.vb" Inherits="WebPartList.WebRyohiControl1" %> 2 3<div class="ryohi"> 4 5 <table border="1"> 6 <td class="style1"><asp:TextBox ID="Shuku_T" runat="server" 7 Style="text-align: right" Height="20px" Width="118px" AutoPostBack="True" ></asp:TextBox>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

uc1.Shuku_T = "BBB" <------ **プロテクトの為アクセスできません。 エラーになります。

Shuku_T というのはユーザーコントロールに配置した TextBox への参照らしいので、上のコードのようにそれに文字列を代入することはできませんが、とりあえずそこは置いといて、Shuku_T.Text プロパティにアクセスできれば良いということなら、それにアクセスするパブリックプロパティをユーザーコントロールのコードビハインドに定義して、それ経由でアクセスしてはいかが?

【追記】

下のコメント欄で「プロパティの書き方を回答欄に追記しておくので見てください」と書いた件です。これが質問者さんのやりたいことと違う場合は、具体的に、ここに書いてあること以外は何も知り得ない他人が読んで分かるように、コメント欄にどう違うのかを書いてください。

.ascx

例えば以下のような TextBox を含むユーザーコントロールがあって、それを使う .aspx ページからコードビハインドで TextBox1.Text に文字列を設定する場合、

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %> <h3>WebUserControl1</h3> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" />

.ascx.cs

ユーザーコントロールのコードビハインドで TextBox1.Text プロパティにアクセスするパブリックプロパティを以下のように定義して、

using System; namespace WebApplication1 { public partial class WebUserControl1 : System.Web.UI.UserControl { // public string TextBoxText { get { return TextBox1.Text; } set { TextBox1.Text = value; } } } }

.aspx

.aspx ページにはそのユーザーコントロールを普通に、以下のように配置し、

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm20.aspx.cs" Inherits="WebApplication1.WebForm20" %> <%@ Register TagPrefix="uc" Src="~/WebUserControl1.ascx" TagName="MyControl" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <uc:MyControl ID="myControl" runat="server" /> </div> </form> </body> </html>

.aspx.cs

上の .aspx ページのコードビハインドで、上に定義したユーザーコントロールのプロパティに以下のようにアクセスして文字列を設定できます。

using System; namespace WebApplication1 { public partial class WebForm20 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { myControl.TextBoxText = "BBB"; } } }

結果は

イメージ説明

投稿2021/03/10 03:31

編集2021/03/11 02:22
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pentagon

2021/03/10 04:42 編集

読み込んだデータを表示したいのですが,出来ないのでしょうか? uc1.Shuku_T uc1は宣言されていません。 エラーになります
退会済みユーザー

退会済みユーザー

2021/03/10 04:55

どこに、何を読み込んで、どこに、どのように表示したいのですか? 最初の質問と話が変わってきてますよね。何を言ってるのか分かりません。ここに書いてあること以外は知り得ない第三者が質問を読んで、分かるように説明してください。
退会済みユーザー

退会済みユーザー

2021/03/10 07:07

質問文に手を加えたようですが、手を加えたことをここに書いてもらわないと当方には通知は来ないので分からないですよ。 手を加えた所は一応読みましたけど、 > uc1.Shuku_T = "BBB" と代入しようととているのですが uc1.xxxのuc1が参照エラーになります。 ・・・というのがメチャクチャで、意味不明です。
pentagon

2021/03/10 07:16

uc1は Private Property uc1 As WebPartList.WebRyohiControl1と定義しているのですが uc1.Shuku_T の uc1 が参照されないようです。
退会済みユーザー

退会済みユーザー

2021/03/10 07:54

そういう書き方はあり得ないので、そういう結果になって当たり前と思うのですが。前のスレッドではユーザーコントロールはちゃんと使えていたようですが、どうなってしまったのですか。
pentagon

2021/03/10 23:28

最初から上手くいっていません。修正オプション等でエラーが解除されていただけです。
退会済みユーザー

退会済みユーザー

2021/03/11 00:28 編集

前のスレッドというのは https://teratail.com/questions/326095 のことで、その書き方で少なくともユーザーコントロールは表示されていたはずですよね。(ユーザーコントロールの中身の書き方は前のスレッドで指摘した通り間違ってますが、そこは本題とは関係ないので置いといて) そこまでできたところで次にユーザーコントロール内に TextBox を追加して、その TextBox.Text プロパティに .aspx.vb から文字列を設定したいというのがこのスレッドの課題では? であれば、上の私の回答で解決できるのでは? とにかくなんにせよ、 > uc1は Private Property uc1 As WebPartList.WebRyohiControl1と定義しているのですが uc1.Shuku_T の uc1 が参照されないようです。 というような書き方はあり得ません。前のスレッドでの書き方に戻しては?
pentagon

2021/03/11 01:15

前のスレッドは画面が4つ有りレイアウトが上手くいかないという質問で内容は張り付けただけの成果物です。 又,それにアクセスするパブリックプロパティをユーザーコントロールのコードビハインドに定義して、それ経由でアクセスしてはいかが? この方法でユーザーコントロールに表示出来るとしても方法が良くわからないのです。
退会済みユーザー

退会済みユーザー

2021/03/11 01:43

> 前のスレッドは画面が4つ有りレイアウトが上手くいかないという質問で内容は張り付けただけの成果物です。 そこまでうまくいったのだから、そのユーザーコントロールのどれかに TextBox を追加して、それに .aspx.vb から TextBox.Text に文字列を書き込むことができればこのスレッドの課題は解決できるのではと言っているのですが。話は通じてますでしょうか? > uc1はPrivate Property uc1 As WebPartList.WebRyohiControl1と定義しているのですが uc1.Shuku_T の uc1 が参照されないようです。 ・・・というのは、訳が分からないままいろいろいじり倒して、手に負えなくなって、質問者さんでも訳が分からなくなったコードをそのまま投げてきたのだと想像してますが、もしそうだとすると、そういうのは止めてください。 自分は、自分の想像の範囲を超える普通と違うことをやっているのは何か理由があると善意に受け取って考えるので、余計に話が通じなくなります。
pentagon

2021/03/11 01:55

内容は張り付けただけです。 定数をHTML内に書いただけでプログラムからセットしたものではありません。
退会済みユーザー

退会済みユーザー

2021/03/11 02:07 編集

何を言っているのか分かりません。どうもお互い話が通じないようです。 プロパティの書き方を回答欄に追記しておくので見てください。それを見てもらっても話が通じないようであれば、あなたと話が通じるようにするのは無理そうな気がします。
pentagon

2021/03/11 02:07

前回のスレッドは4つの画面のレイアウトがずれるという内容で画面の内容はHTMLに直接 <div> 宿泊費</div><div>5,000</div> というふうに書いています。
退会済みユーザー

退会済みユーザー

2021/03/11 02:27 編集

だからそれに TextBox を追加して試してみようというのが上の私のコメントなんですが・・・ そうしてもらえると、少なくとも .aspx ページにユーザーコントロールを配置して表示するところまではできていると分かるし、そこからどうすべきかを考えると話が通じやすいということ、分かってもらえませんか?
pentagon

2021/03/11 02:29 編集

テキストボックスは追加してあって Shuku_T.text そのテキストに uc1.Shuku_T = "BBB" しようとしているのですが入力エラーになるのです .aspx ページにユーザーコントロールを配置は出来ていますが,表示はできていません
退会済みユーザー

退会済みユーザー

2021/03/11 02:33

そんな書き方はあり得ないと言いました。アクセスするならパブリックプロパティを定義してくださいと最初の回答で提案しました。 私のレスを読んでますか? 読んでないとすると問題外ですが、読んでも分からないということなら、分からないところを質問してください。そうしないと話は通じません。
pentagon

2021/03/11 02:36

すみません。10時15分のコメントにも 前のスレッドは画面が4つ有りレイアウトが上手くいかないという質問で内容は張り付けただけの成果物です。 又,それにアクセスするパブリックプロパティをユーザーコントロールのコードビハインドに定義して、それ経由でアクセスしてはいかが? この方法でユーザーコントロールに表示出来るとしても方法が良くわからないのです とかいたのですが....
退会済みユーザー

退会済みユーザー

2021/03/11 03:04 編集

回答欄にプロパティの書き方を追記すると 11:03 の上の私のコメントで書いて、11:22 に回答欄に追記したんですが読んでない?
pentagon

2021/03/11 04:50 編集

すみません。 コードビハインドファイルのvbバージョンを教えて頂けませんか。
退会済みユーザー

退会済みユーザー

2021/03/11 05:17

VB.NET ではなくて C# です。
pentagon

2021/03/11 05:36

VBで作っています。 WebApplication1.aspx.vb,WebUserControl1.ascx.vb がソース上にはあります
退会済みユーザー

退会済みユーザー

2021/03/11 05:53 編集

だから何? まさか VB.NET で書き直してくれとかいうんじゃないよね? それは甘えすぎ。無料の変換サービスだってネットにあるんだからそのぐらい自力でやって。
pentagon

2021/03/11 23:59

有難うございました。 上手くいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問