Как избежать «несохраненных изменений формы» после того, как отправленный ответ является вложением? - PullRequest
0 голосов
/ 06 января 2012

Не берите в голову следующее. Я обнаружил, что моя проблема была вызвана кодом js в другом месте приложения.

Моя заявка отправляет форму. Это относится к методу действия на контроллере, который делает это:

Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=SQLQueryResult.csv");
Response.AppendHeader("Content-Length", sb.Length.ToString());
Response.ContentType = "text/csv";
Response.Write(sb.ToString());
Response.End();
return null;

Это хорошо работает. Браузер рассматривает это как приложение для загрузки. Однако браузер также отображает приглашение «несохраненные изменения формы».

Есть ли способ избежать этой подсказки? У меня не было этой проблемы, когда это была обычная страница asp.net, но теперь, когда я перешел на mvc, я это делаю.

1 Ответ

1 голос
/ 06 января 2012

Трудно сказать, но код, который вы показали, является шаблоном анти-MVC. Вот как будет выглядеть действие контроллера MVC, обслуживающее загружаемый файл:

public ActionResult Download()
{
    StringBuilder sb = ...
    var csv = Encoding.UTF8.GetBytes(sb.ToString());
    return File(csv, "text/csv", "SQLQueryResult.csv");
}

Как видите действия контроллера не пишите в ответ. Это не их цель. Они возвращают результаты действий. Именно те результаты действия должны заботиться о представлении результатов клиенту.

...