dropdownlist的选定值无法访问

时间:2014-03-27 10:35:17

标签: c# asp.net-mvc html.dropdownlistfor

 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

1 个答案:

答案 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。