.net Ajax未与Rotativa ViewAsPdf一起运行

.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); } 此控制器从资源文件中获取特定的资

我在.NETMVC应用程序中有一个带有JsonResult操作的“本地化”控制器

[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>