環境: MVC と Razor を使用した Entity Framework (v6.0)。バックエンドは SQL Server です。
HTML ヘルパー DropDownListFor() は、データベースの文字列列に対して完全に機能しています。ただし、数値ドロップダウンリストで10 進数列を使用すると、フォームがレンダリングされるときに、フレームワークはデータベースからロードされた値を選択しません。
これは、DropDownListFor() に Text と Value の両方の文字列が含まれており、データベースの 10 進数値と一致しないため、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;
}