2017-04-11 16 views
0

妖精の日常的な状況では、ユーザーがASP.NET MVCアプリケーションの列挙型から値を選択できるようにする必要があります。私はMVCバージョン5.2を使用しているので、これを単純に行うことができます:EnumDropDownList値が表示に渡されても値を選択しない

// Model 
public MyEnum EnumVal { get; set; } 

// Controller 
return View(new MyModel{EnumVal = MyEnum.SomeVal}); 

// View 
@Html.EnumDropDownListFor(model => model.EnumVal) 

そして、それはすべて魔法のように動作します。私は十分な時間をそれを当然のために取ってきました。

しかし、私が渡している値がドロップダウンの現在の値として選択されていないことに気づいただけです。

モデルの内容を吐き出して、値が正しく渡されていることを確認できますが、ドロップダウンには最初の値が選択されています。

その他の回答(たとえばherehere)は、私が知っていると思ったことを確認しているようです。つまり、私が渡した値を選択するためにドロップダウンを得るために何か追加する必要はありません。

私は脳のおならですか?なぜこれは機能しないのですか?


更新

ここでは、コントローラのメソッドのためのより完全なリストです:

public ActionResult Create(string enumVal) 
{ 
    var valueToPass = AccountsDestination.QbDUk; 
    Enum.TryParse(enumVal, out valueToPass); 
    return View(new QuickBooksMappingViewModel(){EnumVal = valueToPass}); 
} 
+0

あなたが表示したコードは正常に動作します。問題を引き起こしている可能性のあるJavaScriptがありますか?私は、コントローラメソッドがGETで、POSTの値を変更しようとしていないか、GETメソッドの 'enum'のパラメータがないと仮定します。 –

+0

@StephenMueckeあなたはそれを釘付けにしました!それはget paramsの1つの名前との衝突でした。パラメータの名前を変更するのはそれだけでした。 (これを解答にアップグレードして、私はそれを受け入れます) –

+0

あなたは関連するコードを表示していません - メソッドの署名:) –

答えて

3

問題は、あなたの方法は、お使いのモデルと同じ名前を持つパラメータenumValを(持っているということですプロパティ)。メソッドが実行されると、DefaultModelBinderはパラメータの値をModelStateに追加します。ビューが検出しModelStateの値に選択オプションを設定しようとModelStateに一致するためEnumDropDownListFor()方法は、最初に確認(次いでViewData、最終的にモデル値)、で

。これがデフォルト動作である理由の説明については、TextBoxFor displaying initial value, not the value updated from codeを参照してください。

この場合、パラメータの値は最初のオプションの値であるか、オプション値と一致しません(何らかの理由で最初のオプションが選択されています)。

モデルのプロパティと同じでないようにパラメータの名前を変更するか、ModelState.Clear();を使用してModelStateから値を削除します。

関連する問題