3

MVC3 DropdownListFor 未将模型属性绑定到选定值这是我的视图

@{var items = new List<SelectListItem>(){
                            new SelectListItem {Text = "2", Value = "2", Selected = true},
                            new SelectListItem {Text = "3", Value = "3", Selected = false},
                            new SelectListItem {Text = "4", Value = "4", Selected = false},
                            new SelectListItem {Text = "5", Value = "5", Selected = false}
                        };

        }   
@Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "Value", "Text"))

InvoiceModel 有一个称为 InvoiceItem 类的属性,该类进一步具有 int 类型的属性 Count。count 属性始终为 0,并且不会更新为从下拉列表中选择的值。

请帮助我已经花了几个小时。谢谢你。


感谢您的回复。但我仍然有这个问题。

我使用了@Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "value", "text", 2))

还尝试了@Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "value", "text", "2"))

计数属性始终为 0。我在这里缺少什么。

4

5 回答 5

2

利用:

new SelectList(items, "value", "text", selectedvalue);

前任:

@{var items = new List<SelectListItem>(){
                                new SelectListItem {Text = "2", Value = "2"},
                                new SelectListItem {Text = "3", Value = "3"},
                                new SelectListItem {Text = "4", Value = "4"},
                                new SelectListItem {Text = "5", Value = "5"}
                            };

            }   
    @Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "Value", "Text", 2))
于 2013-07-03T20:56:13.890 回答
2

也许你的问题和我的一样。请检查x.InvoiceItem.Count是属性还是字段。如果它是一个字段,则发布数据不会绑定到它。

我的模型

public class SearchReportObject
{
    public string report_type;
}

在 cshtml 中

@Html.DropDownListFor(model => model.report_type, new SelectList( new List<Object>{new { value = "0" , text = "Red"  },new { value = "1" , text = "Blue" },new { value = "2" , text = "Green"}} , "value", "text"))

在 post 表单上,report_type始终具有null. 但是当我report_type从一个字段更改为这样的属性时:

public class SearchReportObject
{
    public string report_type{ set; get; }
}

它工作正常。

于 2016-04-21T16:25:05.927 回答
1

这是因为 Model.InvoiceItem.Count 的当前值(DropDownListFor 中的第一个参数)覆盖了 SelectList 中的选定值。

正是这样,您的视图模型当前值可以用于在模型错误后设置该值。

Cyber​​drew 已经发布了这个问题的解决方案,你必须使用 SelectList 构造函数的第三个参数,它代表默认选择值:

@Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "Value", "Text", 2))
于 2013-07-03T21:27:42.003 回答
0

我弄清楚了这个问题。我没有在保存按钮单击事件中将下拉列表发布到控制器。

于 2013-07-10T15:22:30.020 回答
0

检查您是否真的将实际表单发送到服务器,或者您是否通过 AJAX 或类似的方式发送自定义 JSON 数据。

我花了一段时间才终于意识到我的表单没有直接发送到服务器,并且“保存”按钮实际上是在发出 AJAX 请求。因此,解决方法是在 JSON 数据的新属性中设置选择字段值。

现在想想,select 元素的值一直都是正确绑定的。它只是没有按照我想象的方式发送。

于 2019-11-07T20:37:39.930 回答