Внедрение зависимостей в Ajax Partial, загружаемое из метода действия в Index.chtml.cs в Razor Pages

Я пытаюсь ввести: @inject IStringLocalizer<IndexModel> локализатор в частичное представление этой страницы (Index.cshtml.cs), но это не работает. Служба работает на главной странице Index.cshtml, но когда я загружаю часть, используя:

$('#formID').load('index?handler=form&[email protected]&[email protected]')

и с помощью метода действия, который я определил в Index.cshtml.cs:

 public PartialViewResult OnGetForm(string first, string last)
    {
        //ViewData["Form"] = localizer["Form"];           
        //Input.Localizer = localizer;
        Input.FirstName = first;
        Input.LastName = last;
        return Partial("IndexPartials/Form", Input);            
    }

Он показывает только язык по умолчанию, у меня есть элемент выбора в макете, который изменяется между тремя языками, и пока перевод меняется на главной странице, загруженные части ajax показывают язык по умолчанию.

Я пробовал разные вещи: 1- Внедрение службы IStringLocalizer в файл Index.cshtml.cs и использование ее через viewbag или напрямую через свойство модели. 2- Внедрение этой службы непосредственно в метод действия и отправка ее, как указано выше, в частичную. 3- вводить эту услугу непосредственно в партиал.

Ни один из них не работает, все показывают язык по умолчанию (или, может быть, ключ, поскольку ключ и перевод по умолчанию одинаковы), я боюсь, что другие службы, которые я создам, не будут работать ни с частичными элементами ajax. Как использовать локализацию и сервисы в Ajax-загруженных партиалах (которые загружаются с помощью методов действий)?


person mz1378    schedule 22.12.2020    source источник


Ответы (1)


Я отправил значение культуры методу действия ajax:

 $('#formID').load('index?handler=form&[email protected]&[email protected]&[email protected]')

и добавил параметр культуры в метод действия Ajax:

public PartialViewResult OnGetForm(string culture, string first, string last)
    {
        //ViewData["Form"] = localizer["Form"];           
        //Input.Localizer = localizer;
        Input.FirstName = first;
        Input.LastName = last;
        return Partial("IndexPartials/Form", Input);            
    }

И теперь он работает.

person mz1378    schedule 23.12.2020