在动态创建的CheckBoxList控件中本地化字符串

时间:2012-06-11 05:12:32

标签: asp.net localization checkboxlist

我在asp.net 4项目的ascx用户控件中有一个基本动态创建的复选框列表。现在,它用于向checkboxlist控件添加可能的角色列表(例如,admin,officer,customer),然后用户通过查找这些字符串来检查他们想要应用的角色。

代码如下。

在页面上......

<asp:CheckBoxList ID="AvailableToRoles" runat="server" CssClass="Labels" 
    RepeatColumns="3"></asp:CheckBoxList>

在Page_Load上,它调用一个字符串列表作为数据源。

this.AvailableToRoles.DataSource = Contact.GetPossibleRoles();
        this.AvailableToRoles.DataBind();

然后在连接到按钮的更新中,它调用以下字符串来检查CheckBoxList角色并将角色添加到联系人。

List<Role> Roles = new List<Role>();

Roles.Add(Role.GetRole("Admin"));
Roles.Add(Role.GetRole("Officer"));
foreach (ListItem c in this.AvailableToRoles.Items)
{
    if (c.Selected)
    {
        if (c.Text != "Admin")
        {
            Roles.Add(Role.GetRole(c.Text.Trim())); 
        }
    }
}

现在我需要将其本地化。我有全局资源字符串,其中列出了可以选择的所有角色,我需要它以用英语,西班牙语,德语和法语向用户显示全局资源,然后在以后检查它时会搜索到的值。角色而不是资源字符串。

虽然不必彻底改变代码,但不太确定如何执行此操作。是否有一种简单的方法可以让它发挥作用?

1 个答案:

答案 0 :(得分:0)

您可以做的是添加一个类,该类将角色显示名称(可本地化)与角色名称相关联(不会随本地化而变化)。然后,您可以创建这些并在数据绑定中使用它们。

例如:

class DisplayableRole
{
    public string DisplayName { get; set; }
    public string RoleName { get; set; }
}

确保设置AvailableToRoles的DataTextFieldDataValueField属性,以便将值绑定到角色名称,但显示标签绑定到可本地化的显示名称。然后只需添加一个方法(比如WrapInDisplayableRoles)将角色名称列表转换为DisplayableRole对象列表并在其上显示数据绑定:

this.AvailableToRoles.DataTextField = "DisplayName";
this.AvailableToRoles.DataValueField = "RoleName";
this.AvailableToRoles.DataSource = WrapInDisplayableRoles(Contact.GetPossibleRoles());
this.AvailableToRoles.DataBind();

然后使用他们的Text属性而不是使用ListItem的Value属性。这些将对应于DisplayableRole对象的RoleName值(与语言无关)。

foreach (ListItem c in this.AvailableToRoles.Items)
{
    if (c.Selected)
    {
        if (c.Text != "Admin")
        {
            Roles.Add(Role.GetRole(c.Value)); 
        }
    }
}