2016-08-22 13 views
0

私の編集ビューでは、複数の入力ボックス(EditorFor)を持つフォームがあり、各入力には=, <>, IN, NOT INのような値を持つ '演算子'のドロップダウンがあります。編集ビューに入るたびに、選択したドロップダウン値が「リセット」されています。HtmlDropDownListFor Editビューで現在の値を選択リストに保持する方法

渡されたViewModelには正しい値が含まれていますが、選択リストをデフォルト値に戻すことはできません。

ドロップダウン

@Html.DropDownListFor(model => model.JcrOrgBudgetGroupOp, new SelectList(OperatorsHelper.StrOperators,selectedValue:Model.JcrOrgBudgetGroupOp) 

StrOperators

public static class OperatorsHelper 
    { 
     public static IEnumerable<string> StrOperators = new List<string> 
     { 
     "=", 
     "<>", 
     "IN", 
     "NOT IN" 
    }; 
} 
+1

コードは正常です。 'Model.JcrOrgBudgetGroupOp'にこれらの文字列値の1つが含まれていますか? – Shyju

+0

コントローラ内のEdit ActionMethodをデバッグすると、ViewModelに 'JcrOrgBudgetGroupOp 'の値があることがわかります –

+1

何の値ですか?それらの文字列値の1つ?そうすればうまくいくはずです。私はちょうどコピーし、地元のプロジェクトに貼り付け、それは正常に働いた。 – Shyju

答えて

0

まず、ビュー内SelectListを作成することは時々問題となり得ます。 DropDownListForSelectListを必要としません:ただIEnumerable<SelectListItem>。その後

public static class OperatorsHelper 
{ 
    public static IEnumerable<string> StrOperators = new List<string> 
    { 
     return new[] { "=", "<>", "IN", "NOT IN" }.Select(op => new SelectListItem 
     { 
      Text = op, 
      Value = op 
     }); 
    }; 
} 

:常にこれを行うために推奨される方法のようなものを行うことです

@Html.DropDownListFor(m => m.JcrOrgBudgeGroupOp, OperatorsHelper.StrOperators) 

カミソリは、自動的にSelectListを作成し、適切な項目を選択します。

注意しなければならないことは、実際にはModelStateにある値であり、必ずしもModelの値ではないことです。重要なことに、ModelStateは、RequestViewBag/ViewDataの値で構成され、最後にModelの値で構成されています。つまり、jcrOrgBudgetGroupOpという名前のフィールドを投稿し、jcrOrgBudgetGroupOpのURLからアクションパラメータの値を渡すか、ViewBag.JcrOrgBudgetGroupOp(どちらの場合でもケーシングは問題ありません)に設定すると、その値は常に選択された値になります。

関連する問題