Mam do czynienia z następującym problemem:
Mam kontroler z powiedzmy następujące działania:
[HttpGet]
public ActionResult Index()
{
var viewModel = new IndexViewModel();
return View("Index", viewModel);
}
[HttpPost]
public void ExportToExcell(LeadsViewModel model)
{
// Export to excell code goes here
}
Problem jest następujący:
Użytkownik wchodzi na stronę Index z tym adresem URL: / Controller / Index
Następnie użytkownik przesyła formularz do Action ExportToExcel
Dane są eksportowane do programu Excel (pobrany plik) i wszystko jest w porządku.
Adres URL staje się / Controller / ExportToExcell
Następnie, gdy klikam "Enter", przechodzę do To / Controller / ExportToExcell, ale GET i oczywiście polegając na Page Not Found, pytanie brzmi, jak właściwie radzić sobie z tym w MVC
Odpowiedzi:
4 dla odpowiedzi № 1Nie używaj void
jako zwracany typ akcji postu, użyj znaku ActionResult
[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
// Export to excell code goes here
return RedirectToAction("Index");
}
2 dla odpowiedzi nr 2
Uważam, że problem polega na tym, że nie zwracasz pliku FileResult, a przeglądarka przekieruje Cię do ścieżki do wpisu. Nie można tego przetestować teraz, ale uważam, że poniższe elementy powinny działać.
[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
// Generate the Excel file into a MemoryStream for example
// Return a FileResult with the Excel mime type
return File(fileStream, "application/vnd.ms-excel", "MyExcelFile.xls");
}
Czek FileResult i Controller.File po więcej szczegółów.
Na marginesie, nie jestem całkowicie pewien, czy jest to typ mime dla pliku Excel, ale jeśli mówisz, że już pobierasz plik, prawdopodobnie już go masz :)
0 dla odpowiedzi № 3
Musisz zwrócić ActionResult zamiast pustki.
public ActionResult ExportToExcel(PagingParams args)
{
var data = new StudentDataContext().Student.Take(200).ToList();
return data.GridExportToExcel<Student>("GridExcel.xlsx", ExcelVersion.Excel2007, args.ExportOption);
}
Sprawdź link: Eksportuj akcję