2012-06-11 40 views
0

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

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

不太确定如何做到这一点,但不必彻底改变代码。有没有一种简单的方法来使这个工作?

回答

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

然后,而不是用你listItems中,用自己的Value财产Text财产。这些将对应于DisplayableRole对象的RoleName值(与语言无关)。

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