このところ、猛烈にASP.NETを勉強しているのだが、些細な事で良くつまづく。
以下、自分用のメモ
ASP.NETでエラー発生時のチェック項目など
ASP.NET MVCのWebプロジェクトが突然発行出来なくなった
2016/12/21
症状
ASP.NET MVCのWebプロジェクトが突然発行出来なくなった。
発行を実行すると、ダダーッと沢山のメッセージが出るが、特に大きなエラーなどは起こっていない。
でも発行時のPreview画面を見ても、発行予定のファイルもフォルダも一つも表示されない。その結果、何も発行出来ないのだ。
エラーメッセージも出ない。
先ほどまで何ら問題無くサイトの発行を実行すると、Windows VPSサーバーに発行(Deployment)出来ていたのに、気が付いたら出来なくなっている。
自分では特におかしな事をした心当たりも無い。原因不明。
解決
TypeScript2.0にバグがあるようだ。
そのASP.NET MVCプロジェクトでTypeScriptを使っている場合に注意が必要だ。
具体的には、
C:\Desktop\ProjectFolder\MyAspNetMVC_PJ\subFolder\file1.ts
なら問題は無いのだが、TypeScriptファイルのパス名のどこかに日本語が入っている場合に、
C:\Desktop\ProjectFolder\MyAspNetMVC_PJ\日本語subFolder\file1.ts
この問題が再現する。
解決方法は、
フォルダのパス名をシングルバイト文字に変更すると良い。
なお、ワテの場合には、そのTypeScriptファイルはテスト用に仮に作成したもので、その時に保管先フォルダ名に日本語を使ってしまった。それが原因で今回の問題に遭遇したのだ。
ワテの場合には、このフォルダをプロジェクトから除外すると解決した。
なお、WEB発行の時に特定のフォルダやファイルを除外する方法は幾つかある。
一つ目は
PropertyのPublishProfilesフォルダにある
XXXXX.pubxml
と言うファイルの中で、
<PropertyGroup> <ExcludeFilesFromDeployment> *.js.map; *.js; </ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment> myTest; unusedFolder; </ExcludeFoldersFromDeployment> </PropertyGroup>
などの記述をする。
あるいは、
ソリューションエクスプローラーで特定のファイルを右クリックして
プロパティ
詳細
ビルドアクション コンテンツ
がデフォルトだが、それを
ビルドアクション なし
に変更すると、そのファイルは発行対象から除外される。
ところが今回の問題では、どちらの手法も効果無かった。
原因は不明。
兎に角TypeScriptファイルのパス名、ファイル名から日本語を除外すると問題は解決する。
未確認だが多分Web Formプロジェクトでもこの問題は起こると思う。
ちなみに、検索したら、ここに問題が報告されている。
Webプロジェクトにて、フォルダ名またはファイル名に日本語が含まれるTypeScriptファイルがある場合、Web発行ツールでの発行に失敗する。(TypeScript 2.0 使用)
早く直してくれ。
クリックするたび PostBack が発生してページが再読み込みされてしまう
2015/11/06
症状
ASP.NET で WebForm に Button1 を置いて、クリックすると別の cshtml ファイルを別ウインドウで開くようにした。出来たのだが、クリックするたび PostBack が発生してページが再読み込みされてしまう。
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" OnClientClick="window.open('new_page.cshtml');" Text="別のウインドウを開く" />
解決
return false;
を追加すると良いらしい。
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" OnClientClick="window.open('new_page.cshtml');return false;" Text="別のウインドウを開く" />
一番上の最初の行 (Header行) のみText の Alignment が効かない
2015/11/06
症状
ASP.NET で WebForm に GridView1 を置いて、二次元のデータを EXCEL の表のように出力させたいのだが、出力自体は上手くできた。ところが、一番上の最初の行 (Header行) のみ、Text の Alignment が効かない。
具体的には、
GridView1.HeaderRow.Cells[0].HorizontalAlign = HorizontalAlign.Right;
などとやってみたのだが、効かない。不思議な事に、
GridView1.HeaderRow.Cells[0].Font.Bold = false; // Boldは効く
などは効く。2時間くらい試行錯誤したが分からない。結局、CSSファイルで table に対する設定を記述して応急対策した。
.GridViewClass th { text-align:center; }
こんな感じ。GridViewClass は GridView1 に対して CssClass 属性を使って追加しておく。
これで一応解決したが、何故最初のやり方で出来ないのか不明。
それにさらに不思議なのはヘッダー行ではなく2行目以降のデータ行の場合なら、同じやり方で、
protected void GridView1_RowDataBound(object o, GridViewRowEventArgs e) { e.Row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
とすれば問題なく出来るのに。
ますます謎だ。
ファイル分離した JavaScript コードではデバッガーがブレークしなくなった
2015/11/06
症状
ASP.NET で WebForm プロジェクトのデバッグをしていて、
Default.aspx
の中に記述した JavaScript のコードが長くなってきたので、別のファイル
JavaScript1.js
にコードを分離した。
そうしたら、今まではデバッガーのブレークポイントを JavaScript コードの任意の行にセットして、そこで問題なくブレーク出来ていたのに、分離した JavaScript コードではブレークしなくなった。ブレークのマーカーが赤丸ではなく薄い色で表示され、
このファイルのシンボルが読み込まれていない
とうメッセージが出ている。
解決
単純なミスだった。
分離した JavaScript ファイルを Default.aspx で以下のように読み込むようにしたのだが、
<script type="text/javascript" src="js/JavaScript1.min.js"></script>
それにもかかわらず、JavaScript1.js ファイルを開いてブレークポイントをセットしていた。
なので、デバッグ時は上記の行を下記のように min を取って書き換えてやれば解決した。
<script type="text/javascript" src="js/JavaScript1.js"></script>
これでデバッグを行い、完成して最終的に発行する前に、min 版を使う設定に戻せばよい。
最近、こいうミスが多い。20分費やした。
要求されたページの種類は、明示的に禁止されるため処理されません。
2015/11/04
「要求されたページの種類は、明示的に禁止されるため処理されません。拡張子 ‘.cshtml’ が正しくない可能性があります」
というエラーメッセージが出て cshtml ファイルが表示出来ない。
経緯
このASP.NETプロジェクトは、
新しいプロジェクトの追加
.NET Framework 4.5.2
ASP.NET Web アプリケーション Visual C# 空のフォーム
で作成したものであった。そこに、WEBフォーム (WebForm1.aspx) を追加して、プログラミングしていた。これなら問題なく、ビルドや実行が出来る。
ところが、そこへ他のプロジェクトからコピペで hoge.cshtml を持ってきた。
それを表示しようとしたら、冒頭のエラーメッセージが出て動かないのだ。
こういう場合は Web.config ファイルの中に cshtml に関する何らかの設定が必要なのかなと思って一時間くらいググったのだが、分からない。
原因
原因は非常に簡単。だから、ググっても情報が出て来なかったのだ。
つまり、コピペで cshtml を持って来ただけでは、そもそも動かないのだ。
そうではなくて、新規にcshtmlファイルをプロジェクトに追加すると、そのcshtmlを実行するために必要な参照設定などが行われ、web.configも更新される。そのcshtmlファイルにコピー元のcshtmlファイルの中身のみコピペすれば問題なく動く。
あるいは、上記のように既に cshtml ファイルをコピペして来たが動かない場合には、同じく新規に cshtml ファイルを一個プロジェクトに追加すると、cshtmlを実行するのに必要な環境が整うので、コピペして来た cshtml も動くようになる。新規に追加した cshtml は不要なので削除しても良い。
分かってみれば物凄く当然の事だったのだが、1時間くらい費やしてしまった。
コメント