Ajax 不是 运行 Rotativa ViewAsPdf
Ajax is not running with Rotativa ViewAsPdf
我的 .Net MVC 应用程序中有一个 "Localization" 带有 Json 结果操作的控制器。
[HttpGet]
public ActionResult Index(string id)
{
var data = JsonConvert.DeserializeObject("\"" + ResourceHelper.GetString(id) + "\"");
return Json(data, JsonRequestBehavior.AllowGet);
}
此控制器从资源文件中获取特定的资源字符串,并return将其作为Json。
我使用基于 wkhtmltopdf 的 nuget 包 "Rotativa" 版本 1.7.1 创建了一个 pdf。我可以创建 Pdf,这不是问题所在。问题来了,当我在此 pdf 视图上使用 Js 文件时,它对本地化控制器进行 Ajax 调用 abve..
我在 pdf 视图上的 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
};
无法进行 JS Ajax 调用,即使我使用 wkhtmltopf customswitch 选项
"--no-stop-slow-scripts"
和
"--javascript-delay 25000"
当我简单地 return 视图作为视图时,我得到 Ajax 数据没有任何问题。我没有收到 js 错误或类似的错误。是否有可能在 Pdf 视图而不是 Ajax 的我的 Js 中获取 .Net 资源?
感谢您的帮助:)
Rotativa 似乎不支持 ajax 调用。而且因为该网站是由 Rotativa 处理的,而不是在浏览器或其他东西中处理的,所以没有办法解决这个问题。这也是为什么您在浏览器控制台中没有显示 js 错误的原因。
我在这里为您找到两个解决方案。
- 以不同方式生成 PDF
- 将你所有的字符串序列化为一个json字符串并放入HTML。从那里使用 javascript 再次阅读。
你可以像这样写一个 Helper class。
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);
}
}
然后你可以像这样简单地将 Json 字符串放入 ViewBag 中。
ViewBag.translations = new TranslationStrings().GetJsonString();
在 cshtml 视图中,您可以将其写入 javascript 变量中。我将其保存为 window 的子项,因此您可以在 javascript.
中全局访问它
<script type="text/javascript">
window.translations = @(Html.Raw(ViewBag.translations));
</script>
你应该可以像这样访问字符串。
window.translations["resourceStringXY"]
我的 .Net MVC 应用程序中有一个 "Localization" 带有 Json 结果操作的控制器。
[HttpGet]
public ActionResult Index(string id)
{
var data = JsonConvert.DeserializeObject("\"" + ResourceHelper.GetString(id) + "\"");
return Json(data, JsonRequestBehavior.AllowGet);
}
此控制器从资源文件中获取特定的资源字符串,并return将其作为Json。
我使用基于 wkhtmltopdf 的 nuget 包 "Rotativa" 版本 1.7.1 创建了一个 pdf。我可以创建 Pdf,这不是问题所在。问题来了,当我在此 pdf 视图上使用 Js 文件时,它对本地化控制器进行 Ajax 调用 abve.. 我在 pdf 视图上的 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
};
无法进行 JS Ajax 调用,即使我使用 wkhtmltopf customswitch 选项
"--no-stop-slow-scripts"
和
"--javascript-delay 25000"
当我简单地 return 视图作为视图时,我得到 Ajax 数据没有任何问题。我没有收到 js 错误或类似的错误。是否有可能在 Pdf 视图而不是 Ajax 的我的 Js 中获取 .Net 资源?
感谢您的帮助:)
Rotativa 似乎不支持 ajax 调用。而且因为该网站是由 Rotativa 处理的,而不是在浏览器或其他东西中处理的,所以没有办法解决这个问题。这也是为什么您在浏览器控制台中没有显示 js 错误的原因。
我在这里为您找到两个解决方案。
- 以不同方式生成 PDF
- 将你所有的字符串序列化为一个json字符串并放入HTML。从那里使用 javascript 再次阅读。
你可以像这样写一个 Helper class。
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);
}
}
然后你可以像这样简单地将 Json 字符串放入 ViewBag 中。
ViewBag.translations = new TranslationStrings().GetJsonString();
在 cshtml 视图中,您可以将其写入 javascript 变量中。我将其保存为 window 的子项,因此您可以在 javascript.
中全局访问它<script type="text/javascript">
window.translations = @(Html.Raw(ViewBag.translations));
</script>
你应该可以像这样访问字符串。
window.translations["resourceStringXY"]