.net Ajax未与Rotativa ViewAsPdf一起运行
我在.NETMVC应用程序中有一个带有JsonResult操作的“本地化”控制器.net Ajax未与Rotativa ViewAsPdf一起运行,.net,json,ajax,wkhtmltopdf,rotativa,.net,Json,Ajax,Wkhtmltopdf,Rotativa,我在.NETMVC应用程序中有一个带有JsonResult操作的“本地化”控制器 [HttpGet] public ActionResult Index(string id) { var data = JsonConvert.DeserializeObject("\"" + ResourceHelper.GetString(id) + "\""); return Json(data, JsonRequestBehavior.AllowGet); } 此控制器从资源文件中获取特定的资
[HttpGet]
public ActionResult Index(string id)
{
var data = JsonConvert.DeserializeObject("\"" + ResourceHelper.GetString(id) + "\"");
return Json(data, JsonRequestBehavior.AllowGet);
}
此控制器从资源文件中获取特定的资源字符串,并将其作为Json返回
我使用基于wkhtmltopdf的nuget软件包“Rotativa”版本1.7.1创建了一个pdf。我可以创建Pdf,这不是问题所在。问题来了,当我在这个pdf视图上使用Js文件时,它会对本地化控制器abve进行Ajax调用。。
pdf视图上的My Js:
var dataValues = "";
$.getJSON("/Localization/Index/" + "resourceStringXY", function (data) {
dataValues = data;
myFunction();
});
我的Rotativa Pdf控制器:
return new ViewAsPdf("PdfView", model)
{
FileName = "PdfName.pdf",
PageMargins = new Margins(15, 20, 15, 0),
IsJavaScriptDisabled = false,
CustomSwitches = cs
};
不知何故,即使我使用wkhtmltopf customswitch选项,也无法进行JS Ajax调用
“--无停止慢速脚本”
及
“--javascript延迟25000”
当我简单地将视图作为视图返回时,我可以毫无问题地获得Ajax数据。我没有得到一个js错误或类似的东西。是否有可能在Pdf视图而不是Ajax上获取Js中的.Net资源
Thx帮助:)Rotativa似乎不支持ajax调用。由于网站是由Rotativa处理的,而不是在浏览器或其他什么东西中,因此无法修复此问题。这也是为什么浏览器控制台中没有显示js错误的原因 我在这里看到两种解决方案
- 以不同的方式生成PDF
- 将所有字符串序列化为json字符串并将其放入HTML。然后使用javascript再次读取
public class TranslationStrings
{
public Dictionary<string, string> Strings { get; set; }
public TranslationStrings()
{
//init translation dictionary in constructor
Strings = new Dictionary<string, string>
{
//All the keys you need
{"resourceStringXY" , Resources.General.resourceStringXY},
{"resourceStringAB" , Resources.General.resourceStringAB}
};
}
//simple Method to serialize the dictionary.
public string GetJsonString()
{
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(Strings);
}
}
ViewBag.translations = new TranslationStrings().GetJsonString();
window.translations["resourceStringXY"]
在cshtml视图中,可以将其写入javascript变量。我将其保存为窗口的子窗口,以便在javascript中全局访问它
<script type="text/javascript">
window.translations = @(Html.Raw(ViewBag.translations));
</script>