我有一个名为PDF(varbinary)的表列。该列将在kendo ui网格中绑定为从数据库下载pdf的超链接。
以下是我到目前为止的代码。基于我所做的研究。因此我正在实施一个模板。
下面的斜体代码显示错误“必填”,我不太清楚我在这里缺少什么。
columns.Template(@)。ClientTemplate(“下载文件”)。标题(“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");
}
答案 0 :(得分: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");
}
答案 1 :(得分:1)
你必须亲自实现这一点。 KendoUI是一种客户端技术,与从数据源提供任意PDF无关。
如果您想要生成PDF,请查找以下资源:
PDF: http://www.kendoui.com/code-library/mvc/grid/export-grid-to-pdf.aspx
也许这个UserVoice条目: http://feedback.kendoui.com/forums/127393-kendo-ui-feedback/suggestions/3494585-kendoui-mvc-serverside-wrappers-should-allow-expor
答案 2 :(得分:0)
可用的答案似乎已经过时了。该领域有新的发展。请检查this example和telerik api reference。希望它在将来有所帮助。
答案 3 :(得分: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