var vatRate = new List<SelectListItem>();
vatRate.Add(new SelectListItem { Text = "Please select...", Value = "0", Selected = false });
vatRate.Add(new SelectListItem { Text = "0%", Value = "0", Selected = false });
vatRate.Add(new SelectListItem { Text = "5%", Value = "5", Selected = false });
vatRate.Add(new SelectListItem { Text = "20%", Value = "20", Selected = false });
model.VatRate = vatRate;
这是初始化列表的代码,该列表将在我的视图中填充我的dopdownlist。 在我的模型部分是
[Required]
[Display(Name = "VAT Rate")]
public IEnumerable<SelectListItem> VatRate { get; set; }
public IEnumerable<SelectListItem> selectedVatRate { get; set; }
在我看来我确实喜欢
@Html.DropDownListFor(m => m.selectedVatRate, Model.VatRate, new { @class = "form-control" })
然而,当这个页面发布时,我正在选择VatRate的count = 0
为什么会这样?
并且有没有办法只接受下拉列表中的VALUE
?
答案 0 :(得分:1)
这是它的工作原理。 POST动作的内容是在表单上发布的参数。例如,下拉列表将发布表示所选值(0,5,20)的单个数字(或字符串)。所以基本上不是
public IEnumerable<SelectListItem> selectedVatRate { get; set; }
你需要
public int selectedVatRate { get; set; }
要正确处理。然后在帖子selectedVatRate
上将所选值包含为整数(例如,在用户选择的5%选项中为5)。
旁注。默认列表项和第一个选项0%具有相同的值。这看起来不正确,因为你无法在帖子上告诉对方。所以你可能希望默认值为空:
Text = "Please select...", Value = ""
并将selectedVatRate
字段转为int?
。然后在帖子上,如果选择默认选项,您将获得null
,如果是0%,则获得0。