不绑定到模型属性mvc3的下拉列表

时间:2013-07-03 20:39:52

标签: asp.net-mvc-3

MVC3 DropdownListFor不将model属性绑定到选定值 这是我的观点

@{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的属性,它进一步具有属性Count of int type。 count属性始终为0,并且未更新为从下拉列表中选择的值。

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


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

我用过 @ Html.DropDownListFor(x =&gt; x.InvoiceItem.Count,new SelectList(items,“value”,“text”,2))

还尝试了@ Html.DropDownListFor(x =&gt; x.InvoiceItem.Count,新的SelectList(项目,“值”,“文本”,“2”))

Count属性始终为0.我在这里缺少什么。

5 个答案:

答案 0 :(得分: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"))

在帖子表单上,report_type的值始终为null。但是当我将report_type从一个字段更改为这样的属性时:

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

工作正常。

答案 1 :(得分:1)

使用:

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

答案 2 :(得分:0)

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

这样就可以使用您的视图模型当前值来在模型错误之后设置此值。

此问题的解决方案已由Cyber​​drew发布,您必须使用SelectList构造函数的第三个参数,它表示默认选定值:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

现在考虑一下,选择元素值一直都在正确绑定。只是没有按我认为的方式发送。