0

asp.net 4 プロジェクトの ascx ユーザー コントロールに基本的な動的に作成されたチェックボックス リストがあります。現在、可能なロール (管理者、役員、顧客など) のリストをチェックボックス リスト コントロールに追加するために使用され、ユーザーはそれらの文字列を探して、適用するロールをチェックします。

コードは次のとおりです。

ページで...

<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のDataTextFieldおよびプロパティを必ず設定してください。DataValueField次に、メソッド (WrapInDisplayableRoles など) を追加して、ロール名のリストを DisplayableRole オブジェクトのリストに変換し、それにデータバインドします。

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

Text次に、ListItemsのプロパティを使用する代わりに、それらの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 に答える