この質問に続いて、以前に知りたいと思いました-コントローラーのアクションがファイルを返し、応答に書き込まれた後、Javascriptアラートも表示できますか?
このプロジェクトはMVC 1.0
これは、ファイルをダウンロードする直前に Javascipt を実行したい ActionReult です。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName)
{
if (submitButton.Equals("Import"))
{
byte[] fileBytes = ImportClaimData(fileName, new CompanyExcelColumnData());
if (fileBytes != null)
{
//This method stores the string in a message queue which is stored in the
//session and rendered from within a UserControl. The Javascript alert
//is then shown subsequently.
UserMessageUtil.Info("Data imported successfully.", Session);
//The file downloads but no Javascript alert is shown from the line above.
return File(
fileBytes,
"application/ms-excel",
string.Format("Import {0}.xls", DateTime.Now.ToString("yyyyMMdd HHmm")));
}
return View();
}
throw new ArgumentException("Value not valid", "submitButton");
}
ユーザーコントロール内のキューを処理するための HTML ヘルパーメソッド:
public static string UserMessage(this HtmlHelper helper, HttpSessionStateBase session)
{
MessageQueue queue = UserMessageUtil.GetMessageQueue(session);
Message message = queue.Next;
String script = null;
if (message != null)
{
do
{
string messageStr = message.Text;
....
script += @"alert('" + messageStr + "');";
}
while ((message = queue.Next) != null);
return script;
}
return null;
}
基本的に、ファイルはダウンロードされますが、Javascript アラートは表示されません。はUserMessageUtil.Info()
プロジェクトの他の部分で使用され、期待どおりに機能し、実行時にアラートを表示します。