0

所以这是交易,我希望能够将任何 Enumerable 项目导出到 excel:

这是我的应用程序的某个区域中的一个 ActionMethod,它构造了一个“ExportToExcel”模型,然后将其重定向到另一个控制器中的一个 Action Method,另一个是执行所有格式化到 Excel 工作的方法:

public ActionResult ExportCustomListToExcel()
{
    var exportModel = new ExportToExcelModel();

    //Here I fill up the model with a dataTable / other file info like
    //exportModel.Items = blah blah..

    return RedirectToAction("ExportToExcel", "Shared", new { model = exportModel, testString = "test",  area = "Shared" });
}

这是我的 Shared ExportToExcel ActionMethod:

public ActionResult ExportToExcel(ExportToExcelModel model, string testString)
{
    //PROBLEM IS RIGHT HERE!
    // where testString == "test"
    // but model == null :(


    //Ommited unrelated code
}

我的 ExportToExcel actionMethod 被击中,但在某个地方我的 ExportToExcelModel 迷路了:(

注意:它成功传递了像“testString”这样的字符串,所以我的模型有问题吗?

以防万一,ExportToExcelModel 是:

public class ExportToExcelModel
{
    public ExportToExcelModel() {}

    public ExportToExcelModel(string fileName, ItemType itemType, IEnumerable<ExportableToExcelItem> items)
    {
        this.FileName = fileName;
        this.ItemType = ItemType;
        this.Items = items;
    }

    public string FileName { get; set; }
    public ItemType ItemType { get; set; }
    public IEnumerable<ExportableToExcelItem> Items { get; set; }

}

提前致谢!

我第一次真正需要在这里问一个问题,因为我发现的所有其他问题都已经在这里回答了:)


编辑:发布 FormCollection 结果:

http://imageshack.us/photo/my-images/861/sinttulonsa.png 抱歉,新手不能发图片 :(

4

2 回答 2

0

原因是RedirectToAction 结果将启动 GET 请求,并且您的参数必须通过查询字符串传递。显然,一个 url 可以包含的字符数量是有限制的

在我看来,您应该在一个类中而不是在另一个动作之后转换为 Excel。

所以CustomExportAction1CustomExportAction2都打电话

return File(ExcelExporter.ExportExcel(dataToExport));

或类似的东西。

于 2011-12-16T16:01:45.460 回答
0

尝试将您的 ExportToExcel 签名切换为

public ActionResult ExportToExcel(FormCollection data)
{
  var model = new ExportToExcelModel();
  try
  {
    UpdateModel(model, data)
  }
  catch(UpdateModelException ex)
  {
  }
}

查看 FormCollection 中的内容(这可能会有所帮助),并查看 UpdateModel 是否抛出异常,因为当您使操作方法采用模型而不是 FormCollection 时,这就是所见背后发生的事情。

希望能帮助你追踪它

更新: 您可能必须使用 TempData 执行此操作,请阅读此内容,据说您无法使用 ASP.NET MVC 开箱即用地执行此操作!

于 2011-12-16T15:19:32.737 回答