0

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

代码如下。

在页面...

<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())); 
        }
    }
}

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

虽然不必从根本上更改代码,但不太确定如何做到这一点。有没有一种简单的方法可以让它工作?

4

1 回答 1

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();

然后,不要使用TextListItems 的属性,而是使用它们的Value属性。这些将对应于您的 DisplayableRole 对象的 RoleName 值(与语言无关)。

foreach (ListItem c in this.AvailableToRoles.Items)
{
    if (c.Selected)
    {
        if (c.Text != "Admin")
        {
            Roles.Add(Role.GetRole(c.Value)); 
        }
    }
}
于 2012-06-11T11:29:09.507 回答