2

在 ASP.NET 样板中,我正在更改语言,例如

<a href="/AbpLocalization/ChangeCulture?cultureName=en">English</a>

它在我的本地机器上正常工作,但在测试服务器上却不行。
此外,当我在本地单击它时,有时会出现内容为空的 abp.message.error。

我对此有几个问题:

1) 这个 URL (/AbpLocalization...) 是什么,看起来像一个控制器,但我的代码中没有这样的东西?

2)我怎样才能找到并调试它?

3)在另一台服务器上可能会发生什么崩溃(在测试服务器上单击按钮会重新加载状态,但不会更改语言)

4

3 回答 3

2

解决了!造成问题的原因是,测试服务器上的数据库在本地数据库中没有一张表,更重要的是:该表包含在通过实体框架传输到数据库的模型中。将表添加到测试服务器后,一切正常。

于 2017-10-19T15:51:04.710 回答
0

ASP.NET Boilerplate 是一个从模块构建的应用程序框架,其中一个是本地化模块。由于它是开源的,您可以更改默认行为,尽管我不建议在没有充分理由的情况下这样做。

本地化是核心包的一部分,位于:GitHub

我建议您使用文档并根据需要对其进行配置。您可以在此处找到本地化文档:文档

最后,您应该在测试环境中检查您的运行配置,这可能以某种方式出现故障。另一个错误原因可能是您的 ABP 版本有问题

于 2017-09-25T20:52:32.573 回答
0

AbpLocalizationController 位于源代码中

src/Abp.AspNetCore/AspNetCore/Mvc/Controllers/AbpLocalizationController.cs

这是改变文化代码:

public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
        {
            if (!GlobalizationHelper.IsValidCultureCode(cultureName))
            {
                throw new AbpException("Unknown language: " + cultureName + ". It must be a valid culture!");
            }

            var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName, cultureName));

            Response.Cookies.Append(
                CookieRequestCultureProvider.DefaultCookieName,
                cookieValue,
                new CookieOptions {Expires = Clock.Now.AddYears(2)}
            );

            if (AbpSession.UserId.HasValue)
            {
                SettingManager.ChangeSettingForUser(
                    AbpSession.ToUserIdentifier(),
                    LocalizationSettingNames.DefaultLanguage,
                    cultureName
                );
            }

            if (Request.IsAjaxRequest())
            {
                return Json(new AjaxResponse());
            }

            if (!string.IsNullOrWhiteSpace(returnUrl) && AbpUrlHelper.IsLocalUrl(Request, returnUrl))
            {
                return Redirect(returnUrl);
            }

            return Redirect("/"); //TODO: Go to app root
}

https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp.AspNetCore/AspNetCore/Mvc/Controllers/AbpLocalizationController.cs

如果您想调试此代码,请从 github 存储库 fork 项目并将其添加到您的解决方案中。用这个本地项目引用替换您的 abp dll 引用。

同时,您没有提及错误所说的内容。要了解它,请查看网站日志。

于 2017-09-26T05:14:14.437 回答