FC2ブログ

記事一覧

'__o'は宣言されていません。アクセスできない保護レベルになっています。 | asp.net


今回は asp.net において以下のようなエラーが発生することがありますので、その対応方法についてご紹介いたします。

エラー内容:
'__o'は宣言されていません。アクセスできない保護レベルになっています。

このエラーについて、再現方法とその対応方法について検証してみました。


aspnet_ocouldnotaccess_01.png
 


前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.再現コード

以下のように Body 内部に If 文で分岐させたタグの内部に VB コードを埋め込みます。たったこれだけのコードで再現が可能です。
また、VisualStudio のバージョンにより若干エラーに対する挙動が異なるようですので、注意が必要です。
・VisualStudio 2013 ではエラーで実行できません。
・VisualStudio 2015 だとエラーにはなりますが、実行は可能です。

<body>
<form id="form1" runat="server">
<div>
<% If True Then %>
<a href="<%= Me.ResolveClientUrl("~/index1.aspx") %>" />
<% Else %>
<a href="<%= Me.ResolveClientUrl("~/index2.aspx") %>" />
<% End If %>
</div>
</form>
</body>



2.原因

__o とは内部的に宣言されているオブジェクトで、If 文で分岐されているとその内部に VB コードを記述しても __o が内部的に宣言されないことが原因で発生します。



3.対応方法

そこで、以下のように  <% ="" %> を If 文の前に記載します。これにより内部的に __o が宣言され、If 文で分岐されていても VB コードが動作するようになります。
<body>
<form id="form1" runat="server">
<div>
<%= "" %>
<% If True Then %>
<a href="<%= Me.ResolveClientUrl("~/index1.aspx") %>" />
<% Else %>
<a href="<%= Me.ResolveClientUrl("~/index2.aspx") %>" />
<% End If %>
</div>
</form>
</body>





最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。


関連記事

コメント

コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。