2017-11-21 13 views
0

私はこの(説明を打ち切りが、値は正確されている)ように見える列挙有する:C#MVC 5カミソリ:ドロップダウンリストは、小文字の値を表示する代わりに大文字

public enum internalTypes 
    { 
     [Description("Description 1 (W)")] 
     W, 
     [Description("Description 2 (w)")] 
     w, 
     [Description("Description 3 (A)")] 
     A, 
     [Description("Description 4 (C)")] 
     C, 
     [Description("Description 5 (K)")] 
     K, 
     [Description("Description 6 (X)")] 
     X 
    } 

を私が持っていますこのドロップダウンリストをデータベースから取得するビューに表示します。この問題では、値 "W"(大文字)が表示したい値であることに注意してください。

のDropDownListコードは次のようになります。

@Html.DropDownListFor(model => model.Internal_List[i].ValueToDisplay, new SelectList(Model.listOfTypes, "Value", "Text", Model.Internal_List[i].ValueToDisplay), "", new { @class = "full", style = "width:275px" }) 

Model.listOfTypes:Internal_List [i]が.ValueToDisplayが実際に正しく送信され

 IEnumerable<ExtensionMethods.internalTypes> internalTypes= Enum.GetValues(typeof(ExtensionMethods.internalTypes)).Cast<ExtensionMethods.internalTypes>(); 
     evm.listOfTypes  = from inter in internalTypes 
           select new SelectListItem 
           { 
            Text = ExtensionMethods.GetDescription(inter), 
            Value = inter.ToString() 
           }; 

- つまり、それは正しく "W" 送信(大文字)。しかし、ビューの表示「W」(小文字):これは、データベースに格納された値であるので、私は、「W」ではない、「W」を表示しなければならないので

enter image description here

これは、問題です。同様に、「w」が格納されていた場合は、「W」ではなく「w」を表示する必要があります。私は私のプログラムをデバッグするとき、私は明らかに "W"に渡されている値が表示されていることがわかりますので、 "W"が "w"に変換される理由はわかりません。

誰かが私が間違っている可能性がある場所を教えていただけますか?私は単純に "w"に別の価値を与えることはできないことに注意してください - 私はその問題について選択肢がありません。

+0

'Description2(W)'の代わりに 'Description2( w) '?その値のenumメンバ属性は '[Description(" Description 2(w) ")]'で設定されているので、属性が設定されたときとまったく同じように表示されます。 –

+0

Description属性ではなくdisplay属性でEnumDropDownListForを使用できますか? – MarkovskI

+0

@ TetsuyaYamamotoいいえ、それは問題ではありません。データベースの値がwではなくWであるため、 "Description 1(W)"が表示され、 "Description 2(w)"は表示されません。 –

答えて

1

DropDownListFor()(またはEnumDropDownListFor()などの方法)を使用して正しいオプションを選択することはできません。内部的には、バインドするプロパティの値に基づいてSelected属性を設定するために、メソッドは新しいIEnumerable<SelectListItem>を生成します。

具体private static IEnumerable<SelectListItem> GetSelectListWithDefaultValue()方法は、(あなたがsource code hereを見ることができる)が一致し、両方のオプションの両方がselected="selected"属性で設定されるwの値(小文字)とW(大文字)をStringComparer.OrdinalIgnoreCaseを使用して値を比較します。

しかし、あなたは無効になります(multiple属性を持たない)単一0​​を生成するために(一つだけのオプションを選択することができます)、そのブラウザがあなたの場合はselected="selected"

でレンダリングされた最後のものだけを選択し、 enumの値を変更することはできません。HtmlHelperメソッドを使用するには、独自の拡張メソッドを作成する必要があります(独自のプロジェクトにソースコードをコピーし、必要のないさまざまなオーバーロードを削除してください。それは大文字と小文字を区別しません)

関連する問題