我建立一個MVC的Web應用程序和我即將穿牆跑我的頭,還有對這個已經是十幾個主題和所有已接受不爲我工作的解決方案。可能有一些真正愚蠢和簡單的我忘記/看不到,但似乎無法解決。 請不要恨我命名;我正在繼續一個由別人開始的項目。DropDownListFor沒有預選值
我在ManageDetail.cshtml以下行:
@Html.DropDownListFor(m => m.ChecklistWaarde.SoortID, Model.ChecklistOptionsOptions, "Choose a value", new { @class = "form-control" })
此建立了基於財產Model.ChecklistWaarde.SoortID,這是一個整數一個選擇框。傳遞的下一個參數是由以下非常簡單的輔助函數生成的模型中的SelectList:在二級數據庫中執行DB查找(不幸),它接收參數SoortID以及設置預選值:
public SelectList GetChecklistOptions(int selectedId = -1)
{
var soorten = new List<SelectListItem>();
try
{
using (var connection = new SqlConnection(mssqlConnectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandText = "Select Naam, ID From ChecklistSoorten";
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var id = reader["ID"] as int?;
if (id.HasValue)
{
soorten.Add(new SelectListItem { Text = reader["Naam"] as string, Value = id.Value.ToString(), Selected = id.Value.Equals(selectedId) });
}
}
}
}
catch (Exception ex)
{
Globals.Log.Error(ex);
}
return new SelectList(soorten, "Value", "Text");
}
它被調用的控制器是這樣的:
public ActionResult ManageDetail(int? id) {
var model = new MachineDetailsModel(id);
model.ChecklistOptionsOptions = sqlDal.GetChecklistOptions(model.ChecklistWaarde.SoortID);
return View("ManageDetail", model);
}
當我嘗試調試我的代碼,我可以看到,該模型值正確填充:
SoortID
有2(int
)的值Model.ChecklistOptionsOptions
有人口SelectLis
噸- 在檢查
SelectList
我發現,只有與價值項目「2」的屬性Selected = true
,這是false
爲所有其他人。 - 表單呈現時,它不會選擇值爲2的項目,而是會選擇第一個項目「選擇一個值」
- 檢查HTML,我發現值爲2的項目的確是沒有被選中,與我期待的相反(請參閱下面的HTML;爲了可讀性而在計數和文本中縮短了列表)。我期望看到第2項的「已選中」,因爲它是在
SelectList
中選定的。
<select class="form-control" data-val="true" data-val-number="The field SoortID must be a number." data-val-required="The SoortID field is required." id="ChecklistWaarde_SoortID" name="ChecklistWaarde.SoortID" style="min-width:100%;">
<option value="">Choose a value</option>
\t \t <option value="1">Item A</option>
\t \t <option value="2">Item B</option>
\t \t <option value="3">Item C</option>
\t \t <option value="4">Item D</option>
\t </select>
我缺少什麼?如何選擇值爲「2」的項目,因爲它在SelectList
中,我將其傳遞給DropDownListFor()
函數?
在將模型傳遞給視圖之前,您需要在GET方法中設置屬性'SoortID'的值。並且設置'SelectListItem'的'Selected'屬性是毫無意義的(綁定到model屬性時忽略它)。而更無意義的是,從第一個使用'new SelectList(...)'創建另一個'SelectList' - 只需使用'return soorten;' –
@StephenMuecke SoortID在模型的構造函數中設置,所以它已經設置爲風景。 只是通過列表索引而不是新的SelectList的好建議將改變這一點。 –
如果'SoortID'的值與您的其中一個選項相匹配,那麼它將在視圖中被選中。如果不是,那麼你還沒有告訴我們其他的東西。 –