Рейтинг:
2
Ali Mosaad Mohamed
Привет... Я нашел слишком много решений, но большинство из них создают проблемы на других страницах, поэтому это решение не создаст никаких проблем и решит вашу проблему правильно.
Решение
public ActionResult YouActionResultName()
{
Response.ClearHeaders();
var gv = new GridView();
gv.DataSource = db.Locations.ToList();
gv.DataBind();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=LocationsWord.doc");
Response.ContentType = "application/ms-doc";
Response.Charset = "";
StringWriter objStringWriter = new StringWriter();
HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter);
gv.RenderControl(objHtmlTextWriter);
Response.Output.Write(objStringWriter.ToString());
Response.Flush();
Response.End();
objStringWriter.Close();
objHtmlTextWriter.Close();
return Redirect("Index");
}
Самое главное добавить Response.ClearHeaders();
в начале действия результат.
После этого перейдите в индекс и поставьте этот код:
@using (Html.BeginForm("YouActionResultName", "YourControllerName", FormMethod.Post))
{
<button class="btn btn-default" type="submit"> Excel <span class="glyphicon glyphicon-export"></span></button>
}
Надеюсь, что это поможет, удачи вам всем.
С уважением,
Али Мохамед Мосаад,
разработчик
Richard Deeming
ОП использовал веб-формы. Ваше решение, по-видимому, представляет собой странную смесь элементов управления MVC и WebForms, а также использование более старого подхода WebForms к отправке файлов клиенту вместо правильного MVC FileResult
подход.
Вы также отправляете заголовки, указывающие, что ответ является документом Word, даже если вопрос (и ваша ссылка) относятся к документу Excel.
И "HTML, но лгите об этом в заголовках" это не документ Word или файл Excel. Excel обычно делает все возможное, чтобы попытаться интерпретировать HTML, но он будет отображать предупреждение о том, что тип файла не соответствует содержимому.
Ali Mosaad Mohamed
Привет, Ричард Диминг, мы не воюем друг с другом, здесь мы делимся опытом в коде.
1 - Вы когда-нибудь читали вопрос о (Анкит Агарвал)? если вы прочтете, то поймете, почему я так сформулировал свой ответ.
2 - Вы можете добавить свой ответ, а не неуважение и сделать отрицательный комментарий.
3 - покажите нам свой опыт, в противном случае будьте осторожны, когда говорите о любом ответе, потому что это ответственно.
с наилучшими пожеланиями и пожеланиями,
Али Мохамед Мосаад
разработчик
Richard Deeming
Я читал этот вопрос - А вы? ОП использовал веб-формы. Ваш ответ - нет.
Я не склонен добавлять новые ответы к уже ответившим вопросам трехлетней давности. Это не проблема, если вы добавляете что-то новое в обсуждение. Но я не думаю, что ваше решение делает это.
Решение палаша правильное: проблема вызвана попыткой отправить новые заголовки после вызова Response.Flush
. Добавление вызова в ResponseClearHeaders
этого не исправишь.
Я не пытаюсь начать "войну", я просто предлагаю дружеский совет. :)