【问题标题】:Dependency Injection in Ajax Partial that is loaded from an action method in Index.chtml.cs in Razor Pages从 Razor 页面中 Index.chtml.cs 中的操作方法加载的 Ajax Partial 中的依赖注入
【发布时间】:2021-04-01 15:54:40
【问题描述】:

我正在尝试在此页面 (Index.cshtml.cs) 的部分视图中注入:@inject IStringLocalizer<IndexModel> localizer,但它不起作用。 该服务在 Index.cshtml 主页中工作,但是当我使用以下方式加载部分时:

$('#formID').load('index?handler=form&first=@Model.FirstNameParam&last=@Model.LastNameParam')

并通过我在 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- 直接在 action 方法中注入此服务并将其发送到部分。 3-将此服务直接注入部分。

它们都不起作用,都显示默认语言(或者可能是键,因为键和默认翻译是相同的),我担心我将创建的其他服务在 ajax 部分中也不起作用。 如何在 Ajax 加载的部分(通过操作方法加载)中使用本地化和服务?

【问题讨论】:

    标签: c# asp.net-core razor-pages .net-5


    【解决方案1】:

    我将文化值发送到 ajax 操作方法:

     $('#formID').load('index?handler=form&culture=@Model.Culture&first=@Model.FirstNameParam&last=@Model.LastNameParam')
    

    并在 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);            
        }
    

    现在它正在工作。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2019-02-23
      • 2020-12-10
      • 2012-12-06
      • 2020-07-11
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多