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

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

ただいまの
回答率

89.21%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,279

oka_hachirou

score 10

前提・実現したいこと

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/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

    キャンセル

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

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる