質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

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

Q&A

解決済

1回答

10068閲覧

aps.netでインクルード先でエラーが発生する

oka_hachirou

総合スコア10

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

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

0グッド

0クリップ

投稿2017/06/28 20:57

編集2017/06/30 05:28

###前提・実現したいこと
VisualStudioでエラーメッセージが表示されているのでエラーを消したいです。

aspxファイルの開発を行っており、ファイルの中で別ファイルを

<!-- #include file ="XXXX.aspx" -->

でインクルードしています。

インクルード元で定義した変数をインクルード先で
使用する際に下記エラーメッセージがでて困っている状況です。
※エラーメッセージがでているが、動かすとインクルード元定義の変数を
参照できているので動作上は問題ありません。
VisualStudioのエラー一覧に下記エラーメッセージが出ているといった内容です。

下記に開発環境周りを記載します。
/////////////////////////
開発環境 : VisualStudio 2013/.NetFramework4.5.2

説明が不足していたり、わかりずらい点があればお手数ですがご指摘
のほどお願いいたします。

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

宣言されていません。アクセスできない保護レベルになっています

###該当のソースコード
実際に簡易なテストプログラムを作成しましたので、下記に記載します。
・インクルード元…Web1.aspx
・インクルード先…Web2.aspx


■Web1.aspx

<script runat="Server"> Dim str1 As String Dim str2 As String Dim str3 As String Dim str4 As String </script> <!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="form2" runat="server"> <div> <table> <tr bgcolor="#FFFFCC"> <td> テストデータ </td> <td> テストデータ </td> <td> テストデータ </td> <td> テストデータ </td> </tr> <tr bgcolor="#FFFFCC"> <td> インクルード元 </td> <td> インクルード元 </td> <td> インクルード元 </td> <td> インクルード元 </td> </tr> <% str1 = "インクルード元定義"%> <% str2 = "インクルード元定義"%> <% str3 = "インクルード元定義"%> <% str4 = "インクルード元定義"%> <!-- #INCLUDE FILE="Web2.aspx" --> </table> </div> </form> </body> </html>

■Web2.aspx

<table> <tr bgcolor="#FFFFCC"> <td> <%=str1.ToString%> </td> <td> <%=str2.ToString%> </td> <td> <%=str3.ToString%> </td> <td> <%=str4.ToString%> </td> </tr> <tr bgcolor="#FFFFCC"> <td> インクルード先 </td> <td> インクルード先 </td> <td> インクルード先 </td> <td> インクルード先 </td> </tr>

インクルード先のstr1~str4で宣言されていません。アクセスできない保護レベルになっています。
といったエラーメッセージがVisualStudio内で表示されます。
インクルード先ではもちろんstr1が宣言されていないのでエラーが出るのは
納得できるのですが、どうにかしてエラーを消す方法はないでしょうか。。。

###試したこと
・DimをPublicに変更
・簡易テストプログラムをつくり問題を再現
・MSDNのサイト閲覧
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/06/29 01:02

コードは ``` と ``` で囲ってください。インデントされて見やすくなりますので。
guest

回答1

0

ベストアンサー

・インクルード元…Web1.aspx
・インクルード先…Web2.aspx

.apsx ファイルを .aspx ファイルに、

<!-- #include file ="ファイル名" -->

でインクルードするというのは、そもそもやり方が間違っていると思うのですが。

以下の Microsoft の記事に書いてありますように、.aspx ファイルに HTML およびクライアント側のスクリプト(.aspx ファイルではない)をインクルードする目的に使うはずです。

ASP.NET でファイルを動的にインクルードする方法
https://support.microsoft.com/ja-jp/help/306575/how-to-dynamically-include-files-in-asp.net

具体的には、以下の記事のように、.aspx ファイルに外部ファイルにある JavaScript を埋め込むのに使います。

aspxファイル内に別のファイルで記述した内容を埋め込む (#includeの利用)
https://www.ipentec.com/document/document.aspx?page=aspnet-include-file

上の前者の記事の「トラブルシューティング」に書いてありますように、インクルードされるファイルの内容は「テキストとしてクライアントのブラウザに送信」されます。

質問者さんがどのような結果を期待して .aspx ファイルに .aspx ファイルをインクルードしようとしているのか不明ですが、インクルードされるファイルの内容が「テキストとしてクライアントのブラウザに送信」されては目的は果たせないのでは?(やってることが見当違いでは?)

やりたいことや質問の背景&全体のシナリオ・ストーリーをきちんと書いていただけませんか?

全体的なやりたいことやストーリーのごく一部を切り出して質問すると、もしその質問が全体的なやりたいことを実現するのには見当違いだった場合、回答も当然やりたいことを実現するには的外れになってしまいます。そうすると、見当違いと的外れのやり取りが繰り返されるだけになって、なかなか解決にたどり着けません。時間の無駄でもありますし。

投稿2017/06/29 01:01

編集2017/06/29 01:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oka_hachirou

2017/06/29 08:32

ご指摘ありがとうございます。 >やりたいことや質問の背景&全体のシナリオ・ストーリーをきちんと書いていただけませんか? インクルード先のファイルを処理によって判定したかった為に 下記の記述内容になっています。  <%If CDbl(Request.Item("idtype")) = X Or CDbl(Request.Item("idtype")) = XX Then%>   <!-- #INCLUDE FILE="ほげほげ.aspx" -->  <%ElseIf CDbl(Request.Item("idtype")) = XXX Then %>   <!-- #INCLUDE FILE="ほげほげ.aspx" -->  <%ElseIf CDbl(Request.Item("idtype")) = XXXX Then %>   <!-- #INCLUDE FILE="ほげほげ.aspx" -->  <%ElseIf CDbl(Request.Item("idtype")) = XXXXX Then %>   !-- #INCLUDE FILE="ほげほげ.aspx" -->  <%End If%>    ※前画面でセレクトして選んだidtypeによって   表示する一覧画面の内容を選定している状況です。  ※また上記インクルードしている箇所でループさせて   DB上のデータを全て表示させる処理を行っています。  ※インクルード先では<td>タグ内で1レコードずつ取ってくるような   処理が記載されています。  ※変数はインクルード元で定義していて、その変数を   各インクルード先ファイルで参照しています。   具体的には、Dim rs1 As ADODB.Recordset   などが宣言されて、インクルード先で指定した   列の値を取ってきています。
退会済みユーザー

退会済みユーザー

2017/06/29 08:41

ちょっと意味が分かりません。そもそもインクルードされるファイルは、そのテキストがそのまま html ソース内にレンダリングされるので、サーバー側での処理が必要な .aspx ファイルをインクルードしても意味がないはずです。見当違いのことをしているということはありませんか? そこをまずクリアにしてください。そうしていただかない限り、これ以上話を進めても進展はなさそうな気がします。
退会済みユーザー

退会済みユーザー

2017/06/29 08:44

あと、質問欄のソースコードは ``` と ``` で囲ってくださいとお願いしたのですが(インデントされて見やすくなりますので)・・・
oka_hachirou

2017/06/30 05:54

>そもそもインクルードされるファイルは、そのテキストがそのまま html ソース内にレンダリングされるので、 >サーバー側での処理が必要な .aspx ファイルをインクルードしても意味がないはずです。 >見当違いのことをしているということはありませんか? 上記のご指摘だと、インクルードした内容がサーバー側で処理されずに、文字列として ブラウザ側に送られるという認識であってますか。 上記認識だと下記のような内容でブラウザ側にくるのですか? ``` <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title> </title></head> <body> <form method="post" action="./Web1.aspx" id="form2"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="ZfIj1pfu2XpzzM+WBj1Ek/JqQH7MKrDhMNl5QgPwv3AiY9iqueWna+3v6qEcrFxrSDKEBTt/SiWxUZfIebDLJbKufYROED6g2rFxBQcnW+A=" /> </div> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="6F8DEF8E" /> </div> <div> <table> <tr bgcolor="#FFFFCC"> <td> テストデータ </td> <td> テストデータ </td> <td> テストデータ </td> <td> テストデータ </td> </tr> <tr bgcolor="#FFFFCC"> <td> インクルード元 </td> <td> インクルード元 </td> <td> インクルード元 </td> <td> インクルード元 </td> </tr> <table> <tr bgcolor="#FFFFCC"> <td> <%=str1.ToString%> </td> <td> <%=str2.ToString%> </td> <td> <%=str3.ToString%> </td> <td> <%=str4.ToString%> </td> </tr> <tr bgcolor="#FFFFCC"> <td> インクルード先 </td> <td> インクルード先 </td> <td> インクルード先 </td> <td> インクルード先 </td> </tr> </table </div> </form> </body> </html> ``` ただ、テストプログラムを実行するとWeb2.aspxのインクルードした内容は サーバー側で処理されて、"インクルード元定義"と文字列変換され表示されているように見えます。。。 確認方法としては、ブラウザのメニューで"ソースの表示"を押して中身を確認いたしました。 サーバー処理を含んだaspxはインクルードせずに、インクルードする側で全て記述するのがお作法的に 正しいということでしょうか。。。 asp.netに触れてまだ一か月に満たないもので見当違いの発言も多々見受けられると思いますが ご容赦ください。 ソースは``````でくくりました。
退会済みユーザー

退会済みユーザー

2017/06/30 07:56 編集

回答欄に紹介した記事(前者の方)に "動的にインクルードされるファイルには、HTML や JavaScript など、任意のクライアント側のコードを含めることができます。このファイルにサーバー側のコードが含まれていると、これらのコードはテキストとしてクライアントのブラウザに送信されるため、ブラウザでページのソースを表示するとコードを見ることができます。ASP.NET では、動的にインクルードされるファイルに含まれているサーバー側のスクリプトは処理されません。これは、すべての ASP.NET コードが、ファイルをインクルードする前に既に実行されているためです。したがって、サーバーによって、再びサーバー側の処理のための読み取りが行われることはありません" と書いてある通りと理解していますが、違う結果になったということでしょうか? 記事に書いてある通りとすると、Web2.aspx のコード表示ブロック <%=str1.ToString%> ~ <%=str4.ToString%> はそのまま html ソースに書き出されるはずですが、質問者さんのケースではそうはならず str1 ~ str4 で参照される文字列がきちんと表示されるということですか?
退会済みユーザー

退会済みユーザー

2018/02/26 02:56

結局どのように解決されたのでしょうか? お手数ですが情報提供していただけると幸いです。
退会済みユーザー

退会済みユーザー

2018/02/26 03:04

今さらながらの話ですみませんが・・・ 上の私のコメントで"ASP.NET では、動的にインクルードされるファイルに含まれているサーバー側のスクリプトは処理されません。" と書いてある Microsoft の記事を紹介しました。 最近まで知らなかったのですが、上記には例外があって、<script runat="server">...</script> で囲まれている C# または VB.NET のコードは、他のコードビハインドのコードと同様にサーバー側で処理されました。ブレークポイントまで設定できます。 詳しくは以下の記事を読んでください。 inc ファイルの C# コードにブレークポイント http://surferonwww.info/BlogEngine/post/2018/01/22/setting-break-point-on-c-code-in-inc-file.aspx
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問