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

私はついに解決策を見つけました:SelectListはそれが必要とするIEnumerableに基づいているようです。すべてのSelectListItemのプロパティTextはダイナミクスであり、IEnumerableのすべてのアイテムに依存します。

SelectListではなく、IEnumerableを変更する必要があります。

私がついにやったこと:

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 に答える
0

ドロップダウンでバインディングを変更する必要があります。

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

またI18nHelper.Message、期待どおりに動作するかどうかも確認してください。

于 2012-12-19T18:18:35.810 に答える