MVC 4将模型从视图传递到通用方法

时间:2015-01-29 12:20:17

标签: asp.net-mvc asp.net-mvc-4 generics parameter-passing

我正在尝试在各种Intranet报告页面上创建一个export-to-excel按钮,该按钮接收一般的viewmodel。我想从我的应用程序中的任何视图访问此方法,但是现在我正在从单个控制器尝试它。 (注意:必须从视图传递视图模型,因为用户已过滤视图模型)

我的控制器中的方法如下:

public void ExportToExcel<T>(T model, string fileName)
        {
            GridView gv = new GridView();
            var lst = (IEnumerable<T>)model;
            gv.DataSource = lst.ToList();
            gv.DataBind();
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xls");
            Response.ContentType = "application/ms-excel";
            Response.Charset = "";
            StringWriter sw = new StringWriter();
            System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
            gv.RenderControl(htw);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
            Response.Clear();
        }

我正在使用:

<a href="@Url.Action("ExportToExcel", new { model = (IEnumerable< Reporting.Models.HelplineSalesViewModel >) Model, fileName = "HelplineSales" })">Export to Excel</a>

点击后我收到错误:

  

“无法在控制器'Reporting.Controllers.PostersController'上调用操作方法'Void ExportToExcel [T](T,System.String)',因为操作方法是一种通用方法。   参数名称:methodInfo“

1 个答案:

答案 0 :(得分:0)

“您的错误表示您的控制器中没有通用的Action方法。您需要做的是为要导出到Excel的每种类型的对象设置单独的类型化操作方法。然后调用此方法他们每个人的通用方法。“ - krillgar