Ситуация
Я работаю над приложением, в котором у меня может быть сетка с элементами X, и у каждого элемента есть кнопка печати. Нажатие на эту кнопку печати позволяет мне вызвать функцию ajax, которая передает идентификатор элемента сетки контроллеру. Я получаю соответствующие данные на основе этого идентификатора, а затем загружаю их в файл Excel. (Получение указанного элемента c еще не завершено)
Что у меня есть
Пока у меня есть базовый код c, который загружает файл Excel вместе с моей сеткой.
Проблема
Проблема, с которой я сталкиваюсь, заключается в том, что, если я нажимаю кнопку «Печать» ... ничего не происходит, даже с точкой останова в моих функциях exporttoexcel
показывает, что функция введена, и я могу выполнить ее, и, несмотря на отсутствие ошибок, ничего не происходит. Однако я добавил случайную кнопку, которая вызывала ту же функцию, и когда я нажал на эту кнопку, файл Excel был загружен. В результате я считаю, что проблема связана с aJax.
Код
<input type="button" value="Test" onclick="location.href='@Url.Action("ExportToExcel", "Profile")'" />
Это код, который загружает файл. Это была простая кнопка, которую я добавил.
function ExportToExcel(id) {
$.ajax({
type: "POST",
url: "@Url.Action("ExportToExcel", "Profile")",
data: { "id": id },
dataType: "json"
});
}
Это функция, которую я хочу работать, но она не работает, и я не вижу, в чем я ошибся.
Экспорт в код Excel
public void ExportToExcelx()
{
var products = new System.Data.DataTable("teste");
products.Columns.Add("col1", typeof(int));
products.Columns.Add("col2", typeof(string));
products.Rows.Add(1, "product 1");
products.Rows.Add(2, "product 2");
products.Rows.Add(3, "product 3");
products.Rows.Add(4, "product 4");
products.Rows.Add(5, "product 5");
products.Rows.Add(6, "product 6");
products.Rows.Add(7, "product 7");
var grid = new GridView();
grid.DataSource = products;
grid.DataBind();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/ms-excel";
Response.Charset = "";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
//Response.Output.Write(sw.ToString());
//Response.Flush();
//Response.End();
// =============
//Open a memory stream that you can use to write back to the response
byte[] byteArray = Encoding.ASCII.GetBytes(sw.ToString());
MemoryStream s = new MemoryStream(byteArray);
StreamReader sr = new StreamReader(s, Encoding.ASCII);
//Write the stream back to the response
Response.Write(sr.ReadToEnd());
Response.End();
// return View("MyView");
}
Теория
Я считаю, что ошибка как-то связана с aJax, я также создаю кнопку в контроллере следующим образом. "<button type='button' class='btn btn-warning' onclick='ExportToExcel(" + c.id + ");'>Print</button>",
Поскольку location.href='@Url.Action
работает, мне было интересно, решит ли моя попытка повторить мою динамическую кнопку c.
Цените любые идеи, которые могут быть предложены.