如何启动 Ajax 并使用下拉按钮传递文化?

How to launch Ajax and pass Culture with DropDown Button?

提问人:Baran 提问时间:6/28/2023 最后编辑:Alessio CantarellaBaran 更新时间:6/28/2023 访问量:24

问:

我正在使用 ASP.NET 7 开发一个多语言应用程序。

我尝试使用 AJAX 方法启动控制器,执行必要的更改并在加载视图后更改 DOM。

问题是没有执行包含 AJAX 方法的 JavaScript 代码。

非常感谢您的支持!

在我的 中,我有以下代码:View

<button aria-haspopup="true" data-toggle="dropdown" type="button" id="page-header-country-dropdown" aria-expanded="false" class="btn header-item">
  <img src="~/assets/images/flags/gb.svg" class="mh-16" alt="English">
  <span class="ml-2 d-none d-sm-inline-block">EN</span>
</button>
<div aria-labelledby="page-header-country-dropdown" id="countries" class="dropdown-menu-right dropdown-menu">
  <a href="javascript:void(0);" class="dropdown-item">
    <img class="mr-1 mh-12" src="~/assets/images/flags/gb.svg" alt="English">
    <span class="align-middle" data-lang="en">English</span>
  </a>
  <a href="javascript:void(0);" class="dropdown-item">
    <img class="mr-1 mh-12" src="~/assets/images/flags/sp.svg" alt="Spanish">
    <span class="align-middle" data-lang="sp">Español</span>
  </a>
  <a href="javascript:void(0);" class="dropdown-item">
    <img class="mr-1 mh-12" src="~/assets/images/flags/fr.svg" alt="German">
    <span class="align-middle" data-lang="fr">Français</span>
  </a>
  <a href="javascript:void(0);" class="dropdown-item">
    <img class="mr-1 mh-12" src="~/assets/images/flags/tr.svg" alt="Türkçe">
    <span class="align-middle" data-lang="tr">Türkçe</span>
  </a>
</div>

我的是:controller

[HttpGet]
public IActionResult ChangeLanguage(string culture) {
  Response.Cookies.Append(
  CookieRequestCultureProvider.DefaultCookieName,
  CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
  new CookieOptions(){ Expires = DateTimeOffset.UtcNow.AddYears(1) });
  return Redirect(Request.Headers["Referer"].ToString());
}

当我单击元素时,我启动以下 AJAX 代码:#countriesdropdown-item

$("#countries .dropdown-item").on("click", function () {
  $.ajax({
    url: '/Client/Home/ChangeLanguage',
    type: 'GET',
    dataType: 'html',
    data: { cultureInfo },
    success: function () {
      $("#countries .dropdown-item").html(response);
      var icon = $(this).children("img").attr("src");
      var lang = $(this).children("span").attr("data-lang");
      lang = lang.toUpperCase()
      $("#page-header-country-dropdown").children("img").attr("src", icon)
      $("#page-header-country-dropdown").children("span").text(lang)
    },
    error: function (xhr, textStatus, errorThrown) {
    }
  });
})

我需要使用 AJAX 来执行控制器,并在加载页面后,更改 DOM 函数,函数放置在 success 中。 如果没有 AJAX,DOM 将被更改,但当程序执行时:

return Redirect(Request.Headers["Referer"].ToString());

放置在控制器的操作中,页面将再次加载并加载初始英语。因此,DOM 修改丢失了。ChangeLanguage()

为什么我的 JavaScript 代码没有使用 AJAX 执行? 我做错了什么?

JavaScript AJAX DOM 文化

评论

0赞 Baran 6/29/2023
嗨,我已经找到了解决方案。不需要AJAX,只需要用asp-controller=“”...并创建一个函数,该函数在页面加载并准备就绪时使用 JavaScript 更改标志。

答: 暂无答案