ASP.NET Tips
カスタムエラーページの設定
実際にサービスを公開するときに,ASP.NETのエラーページは,赤い色とエラーの文字で悪印象に思えてしまうので,穏やかなエラーページに変えておいたほうがよいです.IISの設定→www→プロパティ →ASP.NETタブ→グローバル構成の編集→カスタムエラー→追加 という手順で,ASP.NETのカスタムエラーページを指定する・403,404,503ぐらいは変えておいたほうがよさそう
※存在しないファイル(.aspx)にアクセスがあると,通常の.htmlにアクセスしたときとは別のエラーページが表示される.つまり,IISのカスタムエラーと,ASP.NETのカスタムエラーは別になっている.
・カスタムエラーの対象をRemoteOnlyにしておけば,localhostからはデバッグ用にエラーが見えるようにできます.
ページをキャッシュするようにする
ASP.NETでは,サーバ側,クライアント側の両方にキャッシュを持たせることができます.・サーバ側に持たせることで,毎回ページの生成処理を行わなくてすむようになる.(Location="Server")
・クライアント側に持たせることで,画像を毎回ダウンロードしなくなる (Location="Client")
・Location="Any"を指定すると,サーバ,クライアント,中継プロキシの全てでキャッシュを行うようになる
・逆に,キャッシュしないようにするには,Location="None"
<%@ OutputCache Duration="20" Location="Any" VaryByParam="*"%>参考: http://support.microsoft.com/kb/308516/ja
外部ファイルをインクルードする
Response.WriteFile()を使うと,そのままHTMLファイルを部分的にインクルードして使うことができます.
<%@ Page Language="cs" AutoEventWireup="false"%>
<html>
<body>
<%
Response.WriteFile ("hoge.txt");
%>
</body>
</html>
App_CodeフォルダにC#とVBを混在して使う
普通に,App_CodeフォルダにC#とVBのクラスを混ぜて置くとエラーが出てしまう.それを避けるためには,フォルダを分け,以下のような記述をWeb.configに追加すればよい.
<compilation>
<codeSubDirectories>
<add directoryName="VB" />
<add directoryName="CShap" />
</codeSubDirectories>
</compilation>
ただし,App_Codeが一番先にコンパイルされ,C#とVBどちらが先にコンパイルされるかは指定できない?ようなので,App_CodeのC#のクラスからApp_CodeのVBのクラスを使うことはできない?らしい.もちろん,aspxなどからは参照することができる.
GridViewのデータが更新されない
GridViewとDataSourceのプロパティでEnableViewStateをfalseにする必要があります.デフォルトでtrueになってるので,更新されても,前回のものを使ってしまいます.
DataBindを呼んでも更新されないので,EnableViewStateをtrueにする必要があります.
CSVで表示(Repeaterコントロールを使う)
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbHogeConnectionString %>"
SelectCommand="SELECT * FROM [tbHoge]"></asp:SqlDataSource>
<h1>CSVで表示</h1>
<asp:Repeater ID="Repeater1" runat="server" DataMember="DefaultView" DataSourceID="SqlDataSource1">
<HeaderTemplate>
id,名前,年齢<br/>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="id1" runat="server" Text='<%# Eval("id") %>'></asp:Label>,
<asp:Label ID="name1" runat="server" Text='<%# Eval("name") %>'></asp:Label>,
<asp:Label ID="age1" runat="server" Text='<%# Eval("age") %>'></asp:Label>,
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
<br />
<br />
<h1>テーブルで表示</h1>
<asp:Repeater ID="Repeater2" runat="server" DataMember="DefaultView" DataSourceID="SqlDataSource1">
<HeaderTemplate>
<Table border="1">
<tr>
<td>id</td>
<td>名前</td>
<td>年齢</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="id2" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</td>
<td>
<asp:Label ID="name2" runat="server" Text='<%# Eval("name") %>'></asp:Label>
</td>
<td>
<asp:Label ID="age2" runat="server" Text='<%# Eval("age") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</Table>
</FooterTemplate>
</asp:Repeater>
<br />
<br />
</div>
</form>
DataSourceを使う
AccessDataSourceやSqlDataSourceを,GridViewなどに貼り付けることで,簡単にDBの内容を表すテーブルを表示できます.
GridViewで編集・削除をする
単一のテーブルでないとエラーになるので注意が必要です.つまり,inner joinなどを使った表示の場合,エラーが出ます.
ただ,単一のテーブルでもエラーになることがありますが,そのあたりは,まだ詳しく知りません..
相対パスでmdbファイル(access)やmdf,ldf(SQL Server)ファイルを指定する
まず,データベースファイルを,WebSitesの下のApp_Dataフォルダ以下に置きます.そして,データ接続文字列(ConnectionString)のData Source指定に,
Data Source=|DataDirectory|\\hogeDB.mdb
というように書きます.
Webページ内の一部をプログラムで出力したい
aspx.cs内のResponse.Writeを使わずに,aspxファイル側のディレクティブから,部分的に文字列を出力することができます.
<!-- test.aspx --> <html> <body> <form runat="server" id="form1"> あなたは,<% = GetName() %> です. </form> </body> </html>
// test.aspx.cs
protected String GetName() {
return "ほげ";
}
ASXの出力
Response.ContentTypeに"video/x-ms-asf"を指定することで,HTMLではなく,ASXとして出力することができます.
void WriteAsxOpen(strTitle)
{
// メディアプレーヤーがUTF8を認識してくれないのでSJISにする
Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis");
// コンテンツタイプの指定
Response.ContentType = "video/x-ms-asf";
Response.Write(
"<ASX version = \"3.0\">\r\n" +
"<Title>" + strTitle + "</Title>\r\n" +
"<Entry>\r\n" +
"<Ref href=\"" + strUrl + "\" />\r\n" +
"</Entry>\r\n");
}
DataSourceを使う
AccessDataSourceやSqlDataSourceを,GridViewなどに貼り付けることで,簡単にDBの内容を表すテーブルを表示できます.
GridViewで編集・削除をする
単一のテーブルでないとエラーになるので注意が必要です.つまり,inner joinなどを使った表示の場合,エラーが出ます.
ただ,単一のテーブルでもエラーになることがありますが,そのあたりは,まだ詳しく知りません..
相対パスでmdbファイル(access)やmdf,ldf(SQL Server)ファイルを指定する
まず,データベースファイルを,WebSitesの下のApp_Dataフォルダ以下に置きます.そして,データ接続文字列(ConnectionString)のData Source指定に,
Data Source=|DataDirectory|\\hogeDB.mdb
というように書きます.
IISで,ASP.NET2.0を使えるようにする
以下のエラーが出て困ったら解析エラー メッセージ: 構成セクション connectionStrings を認識できません。
- 「規定のWebサイト」のプロパティから,「ASP.NET」タブ⇒「ASP.NETバージョン」を1.1から2.0に変更する
- さらに,「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i -enable」を実行
ASP.NETで作成したWebサイトを公開する
Webサイトを配置するためには,- 「ビルド」⇒「Webサイトの発行」で直接パスを指定して配置する
- さらに,IISで公開できるようにするためには,IISの管理画面で,配置したフォルダのプロパティを開き,「ディレクトリ」タブの「アプリケーションの設定」にある「作成」ボタンをクリック.
- そうすると,アイコンが変わる.これをやらないと以下のような意味不明なエラーがでて困ることになる..
構成にエラーがあります。 説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。 以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。 パーサー エラー メッセージ: アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されている セクションを使うことはできません。 このエラーは、仮想ディレクトリが IIS でアプリケーションとして 構成されなかった場合に発生します。 ソース エラー: 行 52: <authentication mode="Windows"/>
POSTされたデータの扱い方
Requestオブジェクトに入っています.// <input type="text" name="text1">というテキストボックスがあったとする Label1.text = Request["text1"];というようにすれば使えます.
作成日: 2006年12月20日09時31日08秒
![[トップページ]](../lib/img//top.gif)
![[一覧]](../lib/img//list.gif)
![[検索]](../lib/img//search.gif)
![[ヘルプ]](../lib/img//help.gif)
![[ログイン]](../lib/img//login.gif)