環境:使用MVC和Razor的實體框架(v6.0)。後端是SQL Server。帶實體框架的數字DropDownListFor - 未設置所選項目
對於數據庫中的字符串字段,HTML助手DropDownListFor()可以很好地工作。但是,當我使用具有數字下拉列表的十進制列時,框架在呈現表單時不會選擇從數據庫加載的值。
我認爲這與DropDownListFor()包含Text和Value的字符串並且不能與數據庫中的十進制值相匹配的事實有關,因此SelectedItem未被確定。
我已經嘗試在HTML幫助器內進行投射,但在編譯或運行時失敗。我能找到的所有例子都假設你想選擇一個字符串,而不是一個數字。
任何幫助感激地收到。 謝謝。
查看代碼:問題字段爲CollarSize。下拉列表是CollarSizeSelect。
<div class="form-group">
@Html.LabelFor(model => model.CollarSize, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CollarSize, Model.CollarSizeSelect, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CollarSize, "", new { @class = "text-danger" })
</div>
</div>
類定義包含這樣定義的列:
public Nullable<decimal> CollarSize { get; set; }
CollarSize下拉列表中內置如下:
public IEnumerable<SelectListItem> ChestSizeSelect
{
get
{
return GetSelectNumberRange(32, 60, (decimal)1.0);
}
}
private static List<SelectListItem> GetSelectNumberRange(int start, int end, decimal increment)
{
List<SelectListItem> numlist = new List<SelectListItem>();
for (decimal i = start; i <= end; i = i + increment)
{
numlist.Add(new SelectListItem() {Text = i.ToString(), Value = i.ToString()});
}
return numlist;
}
有作爲'在HTML decimal'沒有這樣的事情。如果'CollarSize'的值完全匹配你的一個選項(即使用'ToString()')的值,那麼將顯示該選項 –
謝謝。我嘗試過,但得到了InvalidOperationException。 _Templates只能用於字段訪問,屬性訪問,單維數組索引或單參數自定義索引器表達式._我試過:'@ Html.DropDownListFor(model => model.CollarSize.ToString(),' –
否,我不是這麼做的!'CollarSize'的價值是什麼,如果它(比如說)'42'和你有'value =「42」'的選項,那麼它將被選中。「CollarSize」的值是否與您的某個選項的值完全匹配 –