1

我有一个名为 PDF(varbinary) 的表格列。该列将在 kendo ui 网格中绑定为从数据库下载 pdf 的超链接。

以下是我到目前为止的代码。根据我所做的研究。因此我正在实施一个模板。

下面的斜体代码显示了所述错误“必需)”,我不太确定我在这里缺少什么。

columns.Template(@).ClientTemplate("下载文件").Title("Download1");

因此,我建议在 kendo ui 网格中实现下载文件(pdf 格式)。谢谢

    @(Html.Kendo().Grid<HH.Models.OrderModel>()

            .Name("OrderGrid")
            .HtmlAttributes(new { @Style = "align:center; font-size:10px; width:600px" })
            .Columns(columns =>
            {


                columns.Bound(p => p.OrderId);
                columns.Bound(p => p.Date).EditorTemplateName("Date").Format("{0:dd/MM/yyyy}");            
                columns.Bound(p => p.CustFullName).Width(120);
                columns.Template(@<text></text>).ClientTemplate("<a href="javascript: void(0);" onclick="DownloadFile();">Download file</a>").Title("Download1");  
                columns.Template(@<text></text>).ClientTemplate("" + Html.ActionLink("<img src='" + Url.Content("~/Content/icons/pdficon_small.png") + "' />", "DocumentDownload2", "Administration", new { id = "#=OrderId#" }, null) + "").Title("Download2");


            })


            .ToolBar(toolbar => toolbar.Save().Text("Save Changes"))
            .Editable(editable => editable.Mode(GridEditMode.InCell))
            .Selectable()
            .Pageable(paging => paging
                .Input(false)
                .Numeric(true)

                .PreviousNext(true)
                .PageSizes(new int[] { 5, 10, 25, 50 })
                .Refresh(false)

            )

            .DataSource(dataSource => dataSource
                .Ajax()//bind with Ajax instead server bind
                .PageSize(10)
                .ServerOperation(true)
                    .Model(model =>
                    {
                        model.Id(p => p.OrderId);

                    })


                           .Read(read => read.Action("GetOrder", "Administration").Type(HttpVerbs.Get))
                            .Update("EditOrder", "Administration")

                )



        )



**controller**
public ActionResult Download1()  
{  
    string contentType = "application/pdf";  
    string filePath = Server.MapPath("~/Files/OrderDetails.pdf");  
    return File(filePath, contentType, "OrderDetails.pdf");  
}  

public ActionResult Download2(int orderId)  
{  
    string contentType = "application/xlsx";  
    string filePath = Server.MapPath("~/Files/OrderDetails.pdf");  
    return File(filePath, contentType, "OrderDetails.pdf_" + orderId.ToString() + ".xlsx");  
} 
4

4 回答 4

2

您无法在客户端轻松实现 PDF 下载。您应该改为使用另一种操作方法流式传输 PDF 文件。您可以检查这个问题以获得一些想法:Retrieve and display image from database using ASP.Net MVC

网格应包含指向此操作方法的链接:

.ClientTemplate("<a href='/administration/getpdf?orderid=#= OrderID #'>get pdf</a>");

public ActionResult GetPdf(int orderID)
{
     // find the pdf by orderid

     return File(stream, "application/pdf", "DownloadName.pdf");
}
于 2013-05-06T11:49:25.220 回答
1

你必须自己实现这个。KendoUI 是一种客户端技术,与从数据源提供任意 PDF 无关。

如果您想生成 PDF,请查找以下资源:

PDF: http ://www.kendoui.c​​om/code-library/mvc/grid/export-grid-to-pdf.aspx

也许这个 UserVoice 条目: http ://feedback.kendoui.c​​om/forums/127393-kendo-ui-feedback/suggestions/3494585-kendoui-mvc-serverside-wrappers-should-allow-expor

于 2013-05-06T08:57:11.183 回答
0

可用的答案似乎已经过时。这方面有新的发展。请检查此示例以及telerik api 参考。希望它在未来有所帮助。

于 2015-01-30T13:36:18.747 回答
0

另一种做同样事情的方法,在 ClientTemplate 中使用 ActionLink:

columns.Template(@<text>
    @Html.ActionLink("get pdf", "getpdf", "administration", new { orderid= @item.OrderId}, null)
    </text>);

取自:http ://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/faq#how-do-i-use-action-links

于 2016-10-05T09:08:10.400 回答