/ / MVC 4 Routing, obsługa żądań Get / Post - asp.net-mvc, asp.net-mvc-4, asp.net-mvc-routing

MVC 4 Routing, obsługa żądań Get / Post - asp.net-mvc, asp.net-mvc-4, asp.net-mvc-routing

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 № 1

Nie 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ę