在ASP.NET Boilerplate中,我正在改变语言,如
<a href="/AbpLocalization/ChangeCulture?cultureName=en">English</a>
它可以在我的本地计算机上正常运行,但不能在测试服务器上运行 此外,当我在本地点击它时,有时会出现带有空内容的abp.message.error。
我有几个问题:
1)这个URL是什么(/ AbpLocalization ...),看起来像lika一个控制器,但我的代码中没有这样的东西?
2)我如何找到并调试它?
3)在崩溃它的另一台服务器上会发生什么(在测试服务器点击按钮重新加载状态,但不改变语言)
答案 0 :(得分:1)
解决! 造成这个问题的原因是,测试服务器上的数据库没有一个本地数据库中的表,而且更重要的是:该表包含在通过Entity Framework传输到数据库的模型中。将表添加到测试服务器后,一切正常。
答案 1 :(得分:0)
ASP.NET Boilerplate是一个由模块构建的应用程序框架,其中一个是Localization模块。由于它是开源的,你可以改变默认行为,虽然我不建议在没有充分理由的情况下这样做。
本地化是核心软件包的一部分,它位于此处:GitHub
我建议您使用文档并根据需要进行配置。您可以在此处找到本地化文档:documentation。
最后,您应该检查测试环境中的运行配置,这可能会以某种方式出现故障。错误的另一个原因可能是您的ABP版本为issue。
答案 2 :(得分:0)
AbpLocalizationController位于源代码
中的src / Abp.AspNetCore / AspNetCore / MVC /控制器/ 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
}
如果要调试此代码,请从github repo派生项目并将其添加到您的解决方案中。用本地项目引用替换你的abp dll引用。
同时你没有提到错误说的是什么。要了解它,请查看网站日志。