场景:在我们的应用程序中,用户可以通过填写 Knockout 视图上的某些字段来创建发票。可以通过另一个 Knockout 页面预览此发票。我想在我们的 PDF 创建器 (EVOPdf) 中使用预览 URL,因此我们可以为用户提供此发票的 PDF。
为了预览发票,我们通过 ajax 请求加载数据(准备好文档):
var InvoiceView = function(){
function _start() {
$.get("invoice/GetInitialData", function (response) {
var viewModel = new ViewModel(response.Data);
ko.applyBindings(viewModel, $("#contentData").get(0));
});
};
return{
Start: _start
};
}();
当 PDF 创建者请求 url 时,我的问题出在数据绑定中:viewModel 为空。这是有道理的,因为GetInitialData
当 PDF 创建者执行请求时不会调用该操作。在页面末尾直接从预览页面调用此_start
函数也无济于事。
<script type="text/javascript">
$(document).ready(function() {
InvoiceView.Start();
});
</script>
查看 EvoPdf 的文档,应该执行 JavaScript,默认情况下JavaScriptEnabled
是: http ://www.evopdf.com/api/index.aspxtrue
我该如何解决这个问题,或者从淘汰视图创建 pdf 的最佳方法是什么?
控制器动作代码:
public FileResult PdfDownload(string url)
{
var pdfConverter = new PdfConverter();
// add the Forms Authentication cookie to request
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
pdfConverter.HttpRequestCookies.Add(
FormsAuthentication.FormsCookieName,
Request.Cookies[FormsAuthentication.FormsCookieName].Value);
}
var pdfBytes = pdfConverter.GetPdfBytesFromUrl(url);
return new FileContentResult(pdfBytes, "application/pdf");
}
Javascript:
var model = this;
model.invoiceToEdit = ko.observable(null);
model.downloadInvoice = function (invoice) {
model.invoiceToEdit(invoice);
var url = '/invoice/preview';
window.location.href = '/invoice/pdfDownload?url=' + url;
};