将自定义区域性与 ReportViewer 结合使用会返回 CultureNotFoundException

Joh*_*ann 5 c# asp.net reportviewer cultureinfo reporting-services

我的网站使用如下创建的自定义文化:

var cib = new CultureAndRegionInfoBuilder("en-gb-xxxx", CultureAndRegionModifiers.None);
cib.LoadDataFromCultureInfo(new CultureInfo("en-gb"));
cib.LoadDataFromRegionInfo(new RegionInfo("en"));
cib.Register();
Run Code Online (Sandbox Code Playgroud)

用法如下:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-gb-xxxx");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-gb-xxxx");
Run Code Online (Sandbox Code Playgroud)

一切都工作正常,直到我想使用 ReportViewer 控件呈现报告为止。报告文本呈现正常,但图像失败,并且出现以下错误:

System.Globalization.CultureNotFoundException:不支持区域性。参数名称:culture 4096 (0x1000) 是无效的区域性标识符

经过大量谷歌搜索后,我发现很多其他人都在问同样的问题,不幸的是总是没有得到解答。这篇文章非常清楚地描述了问题,但没有提供任何解决方案。

如果没有解决办法,是否有人可以提供解决方法?

Joh*_*ann 3

由于没有答案,我不得不破解:

\n\n

首先,我创建了一个CustomReportViewer,继承自本机Microsoft.Reporting.WebForms.ReportViewer并覆盖该OnPreRender方法。它检查登录用户的区域性(保存在会话中)并回滚到父区域性(如果有)。

\n\n
protected override void OnPreRender(EventArgs e)\n{\n    var culture = new CultureInfo(HttpContext.Current.Session["UserCulture"]);\n    if (culture.CompareInfo.LCID != culture.LCID){\n        var baseCulture = new CultureInfo(culture.CompareInfo.LCID);\n        System.Threading.Thread.CurrentThread.CurrentCulture = baseCulture;\n        System.Threading.Thread.CurrentThread.CurrentUICulture = baseCulture;\n    }\n    base.OnPreRender(e);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我改变了aspx页面中的对象:

\n\n
<web:CustomReportViewer ID="ReportViewer1" runat="server" AsyncRendering="false" SizeToReportContent="true" ProcessingMode="Remote">\n
Run Code Online (Sandbox Code Playgroud)\n\n

等等\xc3\xa0

\n\n

我不会接受这个答案,希望有人能想出一些东西......更干净

\n