将过滤的webgrid导出到Excel – Webmatrix

我试图导出一个过滤的webgrid excel,但是当文件下载它给了我所有的数据库logging,然后改变我的代码。

这段代码是我创buildfilter的页面:

var db = Database.Open("formIGF"); var query = "SELECT * FROM exportTable WHERE dataEncomenda LIKE @0 "; var dataPedido = "%" + Request["dataPedido"] + "%"; var data = db.Query(query, dataPedido); var columns = new[]{"dataEncomenda"}; var grid = new WebGrid(data, columnNames: columns, rowsPerPage:10); <form method="post"> <div class="grid"> <div id="grid"> <label for="dataRecolha">Data do Pedido</label><input id="dataPedido" name="dataPedido" type="text" value="" placeholder="Selecionar um dia"/> <input type="submit" /> @grid.GetHtml( caption: "Numero Total de Entradas: " + @grid.TotalRowCount + " ", tableStyle : "table", alternatingRowStyle : "alternate", headerStyle : "header", columns: grid.Columns( grid.Column("ID"), grid.Column("dataEncomenda", "Data da Encomenda") ) ) <a href="GenerateExcel.cshtml?cond=@Request["dataPedido"]" target="_blank">Exportar para Excel</a> </div> </div> </form> 

这是将出口到Excel的页面的代码:

 @{ Layout = null; var db = Database.Open("formIGF"); var dataPedido = Request.QueryString["dataPedido"]; var data = db.Query(dataPedido); var columns = data.First().Columns; Response.AddHeader("Content-disposition", "attachment; filename=report.xls"); Response.ContentType = "application/octet-stream"; } <table style="border: 1px solid #a59f9f;"> <tr style="font-weight: bold"> @foreach(var column in columns){ <td style="border: 1px solid #a59f9f;">@column</td> } </tr> @foreach(var row in data){ <tr> @foreach(var column in columns){ <td style="border: 1px solid #a59f9f;">@row[column]</td> } </tr> } </table> 

然后我得到一个错误:值不能为空或一个空string。 参数名称:commandText

那意味着没有价值被传递正确?

在我的url我得到这个:

 http://localhost:44552/GenerateExcel.cshtml?cond=04-06-2014 

该值不应该传递给我的查询string?

您正在引用不存在的查询string值。 你已经命名为cond ,但正在使用Request.QueryString["dataPedido"]来获取值。 应该是

 var dataPedido = Request.QueryString["cond"]; 

不仅如此,而且您还将该值作为SQL命令传递给Database.Query方法。 这不是一个有效的sql命令。 您在更改中错过了这一点:

 var query = "SELECT * FROM exportTable WHERE dataEncomenda LIKE @0 "; var dataPedido = "%" + Request.QueryString["cond"] + "%"; var data = db.Query(query, dataPedido);