dropdownlistFor的选定值不可访问

本文关键字:访问 dropdownlistFor | 更新日期: 2023-09-27 17:54:11

 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" })

然而,当这个页面被张贴,我得到选择的dvatrate的count = 0

为什么?

和是否有一种方法只接受VALUE从下拉列表本身?

dropdownlistFor的选定值不可访问

它是这样工作的。POST操作中包含的是表单上发布的参数。例如,下拉列表将发布单个数字(或字符串),表示所选值(0,5,20)。所以基本上不是

public IEnumerable<SelectListItem> selectedVatRate { get; set; }
你需要

public int selectedVatRate { get; set; }

才能正确处理。然后在post上selectedVatRate将包含选择的值作为一个整数(例如5在用户选择的5%选项)。

边注。默认列表项和第一个选项0%的值相同。这看起来不太对,因为你将无法从另一个帖子中分辨出一个。因此,您可能希望默认值为空:

Text = "Please select...", Value = ""

,将selectedVatRate字段变为int?。然后在post中,如果选择了默认选项,您将获得null,如果选择0%,则为0。