0

ASP.Net ページで、送信がクリックされたときに CSV を返すのに問題があります。Form.aspxの送信ボタン用に私が持っているaspボタンの定義は次のとおりです。

<asp:Button id="submitreport" name="submitbutton" text="submit" OnClick="Report_Submit" runat="server" />

そして、これは Form.aspx.cs の対応する関数です。

public void Report_Submit(object sender, EventArgs e) {
    Debug.WriteLine("GETS HERE?");
    Response.Charset = "UTF-8";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetAllowResponseInBrowserHistory(true);
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment; filename='" + DateTime.Today.ToString() + ".csv'");
    Response.Write("test,output");
    Response.End();
}

これを Visual Studio で実行すると、デバッグの印刷行さえ表示されません。セットアップの何が問題なのか誰か知っていますか?

編集: Form.aspx.cs の空の Page_Load 関数にブレークポイントを設定すると、VS がそこで中断するため、ページが正しく設定されていることは確かです。それに加えて、フォームの送信時にデバッグ書き込み行のブレークポイントがスキップされ、同じページが再び返されます。

更新ボタンとハンドラーだけで新しいプロジェクトを作成すると、Report_Submit() 関数が呼び出され、CSV ファイルが正しく生成されます。それはそれを少し絞り込むので、これが機能しない原因となっている私の他のVS 2008プロジェクトで何が起こっているのか知っている人はいますか?

4

2 に答える 2

0

まず第一に、Fiddlerを使用して HTTP 経由で問題をデバッグする必要があります

役立ついくつかのこと:

  • Debug.WriteLine()実行されていませんか?
  • そこにブレークポイントを設定しようとしましたか?
  • デバッグモードでコンパイルしていますか?
  • これは以前に数回私を捕まえたので、デバッグ時に複数のIEのインスタンスを開いていますか?
于 2012-05-07T22:05:49.853 に答える
0

私は .csv ファイルを返すかなり良い回避策を見つけました (これも関数呼び出しを作成するヘッダーで引用されるべきではありませんが、それは問題ではありませんでした)。さらに、ASP.NET が名前を入力するため、名前を指定するべきではありませんが、それも問題ではありませんでした。

関連するフォーム処理コードだけを独自のプロジェクトに移動することは問題なく機能しましたが、私のプロジェクトは大きすぎてそれを管理できませんでした。

私が便利だと思った回避策は、ボタン処理関数を Page_Load() に移動して、次を使用することです。

if(Request.HttpMethod == "GET") {
    Debug.WriteLine("this is just a request for the page"):
}
else if(Request.HttpMethod == "POST") {
    Debug.WriteLine("processing the form");
    //rest of code...
}
else {
    //some HTTP action that doesn't matter
}

ページ要求 (GET) とフォームに入力するユーザー (POST 要求) を区別するため。

于 2012-05-08T17:27:17.457 に答える