1

私は次の問題に直面しています:

私は次のアクションを言うことができるコントローラーを持っています:

        [HttpGet]
        public ActionResult Index()
        {
            var viewModel = new IndexViewModel();

            return View("Index", viewModel);
        }



        [HttpPost]
        public void ExportToExcell(LeadsViewModel model)
        {
            // Export to excell code goes here
        }

問題は次のとおりです。

ユーザーは次のURLでインデックスページに入ります:/ Controller / Index

次に、ユーザーはフォームをActionExportToExcelに送信します

データはExcelにエクスポートされ(ファイルがダウンロードされます)、問題ありません。

URLは/Controller/ExportToExcellになります

次に、[Enter]をクリックすると、/ Controller / ExportToExcellに移動しますが、GETを使用し、もちろんPage Not Foundに該当する場合、MVCでこれをどのように適切に処理するかが問題になります。

4

3 に答える 3

4

void投稿アクションの返されるタイプとして使用しない でください。ActionResult

[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
   // Export to excell code goes here
   return RedirectToAction("Index");
}
于 2012-12-17T10:33:12.137 に答える
2

あなたの問題は、FileResultが返されないことであり、ブラウザがあなたを投稿パスにリダイレクトすると思います。現在はテストできませんが、次のように動作すると思います。

[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");
}

詳細については、 FileResultController.Fileを確認してください。

注として、それがExcelファイルのmimeタイプであるかどうかは完全にはわかりませんが、ファイルを既にダウンロードしていると言う場合は、おそらくすでにファイルを持っています:)

于 2012-12-17T10:53:35.650 に答える
0

voidの代わりにActionResultを返す必要があります。

 public ActionResult ExportToExcel(PagingParams args)
    {
        var data = new StudentDataContext().Student.Take(200).ToList();
        return data.GridExportToExcel<Student>("GridExcel.xlsx", ExcelVersion.Excel2007, args.ExportOption);
    }

リンクを確認してください:エクスポートアクション

于 2012-12-17T12:45:21.760 に答える