注文データ等をテキストファイルに書き込むサンプルをご覧ください。
実行例
コードを見るより先に実行例を見てみましょう。
送信ボタンをクリックすると、サーバー側にデータを保存し、その後「ご注文ありがとうございます」メッセージを表示します。
このように、サーバー側にテキストで注文データが記録されます。
コードの解説
以下のコード (sample6.aspx) をエディタで入力してください。
1: <%@ Import Namespace="System.IO" %>
2:
3: <script runat="server" language="C#">
4: void btn1_click(object sender, EventArgs ev)
5: {
6: string datetime = DateTime.Now.ToString("yyyyMMdd.HHmmss");
7: string order = datetime + "\t" + txtName.Text + "\t" + txtAddress.Text + "\t" + txtMail.Text;
8: string filename = Server.MapPath("~/App_Data/order.txt");
9: using (var s = new StreamWriter(filename, true))
10: {
11: s.WriteLine(order);
12: }
13: string message = datetime + " ご注文ありがとうございます。";
14: lblMessage.Text = Server.HtmlEncode(message);
15: }
16: </script>
17:
18: <html>
19: <head><title>テキスト ファイルへの書き込み</title></head>
20: <body>
21: <form runat="server">
22: <asp:label runat="server" id="lblMessage" backcolor="silver" /><br />
23: <b>品物の送付先 (お客様の住所) を入力してください。</b><br />
24: お名前: <asp:textbox runat="server" id="txtName" /><br />
25: 住所: <asp:textbox runat="server" id="txtAddress" /><br />
26: メール: <asp:textbox runat="server" id="txtMail" /><br />
27: <asp:button runat="server" id="btn1" text="送信" onclick="btn1_click" />
28: </form>
29: </body>
30: </html>
1 行目は StreamWriter を使うためのおまじないです。StreamWriter は 9 行目で出てきます。
4 ~ 15 行目は 27 行目のボタンをクリックした際の処理です。
6 行目で日付時刻文字列を組み立てています。DateTime.Now で日付時刻が取得できます。yyyyMMdd.HHmmss というのは書式指定です。書式指定の際にどのようなものが使えるか知りたい方は カスタムの日付と時刻の書式指定文字列 をご覧ください。
7 行目で日時、名前、住所、メール アドレスをタブで連結した文字列を組み立てています。\t がタブです。
8 行目で注文データを保存するファイル名を決定しています。Server.MapPath や ~ や App_Data にはそれぞれ意味があるのですが説明は割愛します。とても重要なのでいつかは解説を書きます。@@@
9 行目で書き込み・追記でファイルを開きます。StreamWriter を使っているのでファイルは書き込み用だとわかります。StreamWriter の第二引数に true を指定している理由は追記を命じるためです。
11 行目でテキスト ファイルの末尾に一行追加しています。
9 行目で using を使ってファイルを開いたので、12 行目の } でファイルは閉じられます。開いたら閉じなければなりません。open したら close しなければなりません。using で処理を囲むと勝手に close してくれるので、using で処理を囲みましょう。
13 行目でメッセージを組み立てています。
14 行目では 22 行目に置いた Label にメッセージをセットしています。Label にテキストを入れるときは Server.HtmlEncode で囲みましょう。さもないと・・・別の機会に解説を書きます。@@@
22 行目。ラベルの背景色 (backcolor) を銀色 (silver)にしています。
24 ~ 26 行目にテキスト ボックスを並べています。
27 行目に送信ボタンを配置しています。ボタンを押すと 4 行目に書いた処理が動きます。
トラブル対応 1
error CS0246: 型または名前空間名 'var' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
このように「var が使えない」とエラーが出ているなら web.config に compiler 要素を追加してください。
1: <configuration>
2:
3: <system.web>
4:
5: <!-- Off ならブラウザでアクセスしてきた全員にエラー情報を公開します -->
6: <!-- Off のまま放置しないこと -->
7: <customErrors mode="Off" />
8:
9: <!-- true ならデバッグ モードでコンパイルします -->
10: <!-- デバッグ モードだと、エラー情報がリッチになります (その分、サーバーへの負荷は増加するらしい) -->
11: <!-- true のまま放置しないこと -->
12: <compilation debug="true" />
13:
14: </system.web>
15:
16: <system.codedom>
17: <compilers>
18: <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
19: <providerOption name="CompilerVersion" value="v3.5"/>
20: <providerOption name="WarnAsError" value="false"/>
21: </compiler>
22: </compilers>
23: </system.codedom>
24:
25: </configuration>
16 ~ 23 行目が ASP.NET で var を利用するために必要です。
トラブル対応 2
パス 'E:\Account\nyumon\webapps\example\App_Data\order.txt' の一部が見つかりませんでした。
App_Data フォルダが存在しないためエラーが出ています。
FTP クライアント を使って App_Data フォルダを作成してください。
FFFTP の右側ペインにて右クリックして [フォルダ作成] をクリック。
App_Data と入力。
App_Data フォルダができました。
参考になるページ
StreamWriter.WriteLine メソッド (System.IO)
HttpServerUtility.MapPath メソッド (System.Web)
ASP.NET Web サイトのパス Web アプリケーションのルート演算子 (~) についての解説があります。Firefox だと表示されませんので IE で訪れてください。
IIS 7.0 hiddenSegments Element for requestFiltering (IIS Settings Schema) App_Data が特別扱いされている理由の解説があります。
StreamWriter コンストラクタ (String, Boolean) (System.IO)
Label プロパティ (System.Web.UI.WebControls)