asp.net上的全球化问题:它没有更新突出的单词

Lea*_*ves 6 c# asp.net globalization user-controls gridview

我创建了一个网站,有三种语言版本:英语,葡萄牙语和西班牙语.

除了一件事之外,它的一切工作正常:当加载一个强调的单词时,它没有更新BoundField.

以下是在MEMGridView.ascx的gridview中未更新的字段:

<asp:BoundField  DataField="Ocupacao" HeaderText="Ocupação" SortExpression="Ocupação" meta:resourcekey="BoundFieldResource9">
     <ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
Run Code Online (Sandbox Code Playgroud)

At App_LocalResources是三个具有此值的文件:

  1. MEMGridView.ascx.resx(默认为英语) - BoundFieldResource9.HeaderText - "填充率"
  2. MEMGridView.ascx.pt-BR.resx - BoundFieldResource9.HeaderText - "Ocupação"
  3. MEMGridView.ascx.es.resx - BoundFieldResource9.HeaderText - "Ocupación"

当页面第一次加载时,它显示"填充率".然后我将语言改为西班牙语,并展示"Ocupación".如果我返回加载英文页面,它会更新所有字段,除了强调的字段.所以它继续显示"Ocupación"而不是"填充率".

我没有可能发生的事情的线索.

- 更新 - 其他信息 -

MEMGridView是DashBoard.aspx中的UserControl.每当有人更改ddlLanguage(下拉列表)中的语言值或单击"更新"按钮时,都会生成回发.

这是用于更新字段的MEMGridView事件(实际上,它更新除了突出显示的字段之外的所有字段).

public partial class MEMGridView : UserControl
{
    ...

    protected override void FrameworkInitialize()
    {
        if (!string.IsNullOrEmpty(Request["ddlLanguage"]))
        {
            string str = Request["ddlLanguage"];

            //Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(str);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(str);
        }
        else
        {
            string preferredLanguage;

            if (Request.QueryString["Language"] != null)
                preferredLanguage = Request.QueryString["Language"];
            else
                preferredLanguage = Request.UserLanguages[0];

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(preferredLanguage);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(preferredLanguage);
        }

        base.FrameworkInitialize();
    }
Run Code Online (Sandbox Code Playgroud)

Jus*_*rei 1

遇到同样的问题。通过用 TemplateField 替换 BoundField 来修复,就像这样:

<asp:TemplateField ...>
    <ItemTemplate><%# Eval( "Ocupacao" ) %></ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)