2

我有一个这样的对象:

public class AppointmentStatus 
{
     public int Id {get;set;}
     public string I18NKey {get;set;}
}

I18NKey 是指用于翻译的密钥。

在我的表单中,我使用 Select list 创建了一个下拉列表:

Html.DropDownListFor(x=>x.Id, new SelectList(MyListOfStatus, "Id","I18NKey")

有了这个,我将键的值作为文本检索,我想编辑每个 SelectListItem 中的属性文本。

我用过这样的东西:

public static SelectList TranslateValue(SelectList list)
    {
        foreach (var tmp in list)
        {
            tmp.Text = I18nHelper.Message(tmp.Text);
        }
        return list;
    }

但它什么也没改变!Text 属性仍然相同,为什么?

4

2 回答 2

0

您需要在下拉列表中更改绑定:

Html.DropDownListFor(x => x.Id, 
       TranslateValue(new SelectList(MyListOfStatus, "Id","I18NKey"))

还要检查您的I18nHelper.Message工作是否按预期工作。

于 2012-12-19T18:18:35.810 回答
0

我终于找到了解决方案: SelectList 似乎基于它需要的 IEnumerable。每个 SelectListItem 的属性 Text 都是动态的,并且取决于 IEnumerable 的每个项目。

我们需要更改IEnumerable,而不是SelectList

我最终做了什么:

public class AppointmentStatus 
{
     public int Id {get;set;}
     public string I18NKey {get;set;}
     public string Translation {get;set;}
}

public static IEnumerable<AppointmentStatus> TranslateValue(IEnumerable<AppointmentStatus> list)
    {
        foreach (var tmp in list)
        {
            tmp.Translation = I18nHelper.Message(tmp.I18NKey);
        }
        return list;
    }

Html.DropDownListFor(x=>x.Id, new SelectList(HelperClass.TranslateValue(MyListOfStatus), "Id","Translation")

希望对您有所帮助。

于 2012-12-20T08:29:37.567 回答