我在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()));
}
}
}
现在我需要将其本地化。我有全局资源字符串,其中列出了可以选择的所有角色,我需要它以用英语,西班牙语,德语和法语向用户显示全局资源,然后在以后检查它时会搜索到的值。角色而不是资源字符串。
虽然不必彻底改变代码,但不太确定如何执行此操作。是否有一种简单的方法可以让它发挥作用?
答案 0 :(得分:0)
您可以做的是添加一个类,该类将角色显示名称(可本地化)与角色名称相关联(不会随本地化而变化)。然后,您可以创建这些并在数据绑定中使用它们。
例如:
class DisplayableRole
{
public string DisplayName { get; set; }
public string RoleName { get; set; }
}
确保设置AvailableToRoles的DataTextField
和DataValueField
属性,以便将值绑定到角色名称,但显示标签绑定到可本地化的显示名称。然后只需添加一个方法(比如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));
}
}
}