0

アンカータグのクリックでユーザーにファイルをダウンロードさせています。その onclick イベントで、__doPostBack を使用してページを部分的にポストバックし、ユーザーがダウンロード可能なファイルを返しました。

今私が直面している問題は、ファイルが見つからない場合、ページがリロードされ、ajax 呼び出しが設定されないことです。つまり、ブラウザーが _doPostBack 関数の後に応答を期待していて、それを取得できない場合、ブラウザーはページをリロードしますが、$.ajax メソッドは実行されません。私は何が欠けていますか?応答で何かをする必要がありますか?または、応答をキャンセルできる方法はありますか? 助けてください。

アンカータグは、例えば

<a onclick="javascript:__doPostBack('AnnouncementAttachmentDownload','Ch 7 -Software Design2010.doc')">Ch 7 -Software Design2010.doc</a>

サーバー側のコードは

protected void Page_Load(object sender, EventArgs e)
{
    SetPageTitles(ModuleNames.NotSpecified, null, false, true, true, false);
    if (this.Request.Params["__EVENTTARGET"] == "AnnouncementAttachmentDownload")
    {
    string FileName = this.Request.Params["__EVENTARGUMENT"].ToString();
        string destinationPath = Server.MapPath("~/" + System.Web.Configuration.WebConfigurationManager.AppSettings["AnnouncementAttachmentsPath"]).ToString() + "\\";
        if (System.IO.File.Exists(destinationPath + FileName))
        {
            Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
            Response.TransmitFile(destinationPath + FileName);
            Response.End();
        }
        else
        {
            ClientScript.RegisterClientScriptBlock(this.GetType(), "NewScript", "alert('The requested file could not be found, please contact portal.production.support');", true);\\DOESNT WORK
        }

    }
}

else 部分の行は、メッセージを表示するだけですが、その後もページが読み込まれます。

4

1 に答える 1

0

ファイルが見つからない場合、Responce.Redirect を使用して現在のページに再度リダイレクトし、その前に bool をセッション変数に保存し、ページロード時にセッション変数に値が含まれているかどうかを確認し、メッセージを表示しました. また、上記のif式でセッションをクリアしすぎました。

于 2013-01-09T06:54:09.013 に答える