2

ボタンクリックで入力されるリストボックスがあり、ユーザーがリストボックスのインデックスを選択または変更すると、それに関連するファイルがダウンロードされます。

私が抱えている問題は、ボタンを押して新しいレコードを検索すると、ファイルが再度ダウンロードされますが、以下のコードが再度実行されることです。他のボタンでポストバックを呼び出さないようにするにはどうすればよいですか?

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string splitval = ListBox1.SelectedValue.ToString();
    string[] newvar = splitval.Split(',');
    GlobalVariables.attachcrq = newvar[0];
    GlobalVariables.num = UInt32.Parse(newvar[1]);
    string filename = ListBox1.SelectedItem.ToString();
    GlobalVariables.ARSServer.GetEntryBLOB("CHG:WorkLog", GlobalVariables.attachcrq, GlobalVariables.num, Server.MapPath("~/TEMP/") + filename);

    FileInfo file = new FileInfo(Server.MapPath("~/TEMP/" + filename));
    Response.Clear();
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.AppendHeader("Content-Length", file.Length.ToString());
    Response.ContentType = ReturnExtension(file.Extension.ToLower());
    Response.TransmitFile(file.FullName);
    Response.Flush();
    Response.End();
}
4

1 に答える 1

-1

IsPostbackここでプロパティを使用する必要があります。

コードを条件で囲みますif(!Page.Ispostback)

次のアプローチが可能です。

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) {

       if(!Page.IsPostback)
      {
        string splitval = ListBox1.SelectedValue.ToString();
        string[] newvar = splitval.Split(',');
        GlobalVariables.attachcrq = newvar[0];
        GlobalVariables.num = UInt32.Parse(newvar[1]);
        string filename = ListBox1.SelectedItem.ToString();
        GlobalVariables.ARSServer.GetEntryBLOB("CHG:WorkLog", GlobalVariables.attachcrq, GlobalVariables.num, Server.MapPath("~/TEMP/") + filename);

        FileInfo file = new FileInfo(Server.MapPath("~/TEMP/" + filename));
        Response.Clear();
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.AppendHeader("Content-Length", file.Length.ToString());
        Response.ContentType = ReturnExtension(file.Extension.ToLower());
        Response.TransmitFile(file.FullName);
        Response.Flush();
        Response.End();
      }
    }

IsPostBack の MSDN リファレンス:

http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx

使用例:

http://www.geekinterview.com/question_details/60291

お役に立てば幸いです。

于 2013-05-02T04:50:03.793 に答える