アンカータグのクリックでユーザーにファイルをダウンロードさせています。その 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 部分の行は、メッセージを表示するだけですが、その後もページが読み込まれます。