2016-08-22 57 views
0

在我的編輯視圖,我有一個窗體有多個輸入框(EditorFor),每個輸入有一個下拉的'運營商',其值爲=, <>, IN, NOT IN。每次進入編輯視圖時,所選DropDown值都將被「重置」。HtmlDropDownListFor在編輯查看如何保留選擇列表中的當前值

正在傳入的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'有一個字符串值嗎? – Shyju

+0

調試控制器中的編輯ActionMethod,我看到ViewModel具有'JcrOrgBudgetGroupOp' –

+1

這個值是什麼?這些字符串值之一?那麼它應該工作。我只是複製並粘貼到本地項目,它運行良好。 – Shyju

回答

0

首先,在創建針對SelectList有時可能是有問題。 DropDownListFor不需要SelectList:僅僅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選擇合適的項目。

另一件需要注意的事情是,「selected」值實際上是ModelState中的值,不一定是Model上的值。重要的是,ModelStateRequestViewBag/ViewData的值組成,第一個,然後是Model作爲最後的手段。換句話說,如果您要發佈名爲jcrOrgBudgetGroupOp的字段,請爲jcrOrgBudgetGroupOp的URL傳遞動作參數的值,或者設置ViewBag.JcrOrgBudgetGroupOp(在任何情況下都不重要),則該值將始終爲選定內容。

相關問題