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

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

ただいまの
回答率

90.51%

  • ASP.NET

    623questions

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

  • VB

    338questions

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

  • Visual Studio 2013

    319questions

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

  • .NET Framework 4.0

    84questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,987

oka_hachirou

score 2

前提・実現したいこと

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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2017/06/29 10:02

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

    キャンセル

回答 1

checkベストアンサー

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 17: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 17:41

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

    キャンセル

  • 2017/06/29 17:44

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

    キャンセル

  • 2017/06/30 14:54

    >そもそもインクルードされるファイルは、そのテキストがそのまま html ソース内にレンダリングされるので、
    >サーバー側での処理が必要な .aspx ファイルをインクルードしても意味がないはずです。
    >見当違いのことをしているということはありませんか?

    上記のご指摘だと、インクルードした内容がサーバー側で処理されずに、文字列として
    ブラウザ側に送られるという認識であってますか。
    上記認識だと下記のような内容でブラウザ側にくるのですか?

    ```
    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml&quot;&gt;
    <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 16:55 編集

    回答欄に紹介した記事(前者の方)に "動的にインクルードされるファイルには、HTML や JavaScript など、任意のクライアント側のコードを含めることができます。このファイルにサーバー側のコードが含まれていると、これらのコードはテキストとしてクライアントのブラウザに送信されるため、ブラウザでページのソースを表示するとコードを見ることができます。ASP.NET では、動的にインクルードされるファイルに含まれているサーバー側のスクリプトは処理されません。これは、すべての ASP.NET コードが、ファイルをインクルードする前に既に実行されているためです。したがって、サーバーによって、再びサーバー側の処理のための読み取りが行われることはありません" と書いてある通りと理解していますが、違う結果になったということでしょうか?

    記事に書いてある通りとすると、Web2.aspx のコード表示ブロック <%=str1.ToString%> ~ <%=str4.ToString%> はそのまま html ソースに書き出されるはずですが、質問者さんのケースではそうはならず str1 ~ str4 で参照される文字列がきちんと表示されるということですか?

    キャンセル

  • 2018/02/26 11:56

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

    キャンセル

  • 2018/02/26 12: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

    キャンセル

同じタグがついた質問を見る

  • ASP.NET

    623questions

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

  • VB

    338questions

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

  • Visual Studio 2013

    319questions

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

  • .NET Framework 4.0

    84questions

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