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.我在这里缺少什么。
答案 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中的选定值。
这样就可以使用您的视图模型当前值来在模型错误之后设置此值。
此问题的解决方案已由Cyberdrew发布,您必须使用SelectList构造函数的第三个参数,它表示默认选定值:
@Html.DropDownListFor(x => x.InvoiceItem.Count, new SelectList(items, "Value", "Text", 2))
答案 3 :(得分:0)
我想出了这个问题。我没有在保存按钮单击事件中将下拉列表发布到控制器。
答案 4 :(得分:0)
检查您是否确实在将实际表单发送到服务器,或者是否正在通过AJAX或类似的方式发送自定义JSON数据。
我花了一段时间才终于意识到我的表单没有直接发送到服务器,并且“保存”按钮实际上是在发出AJAX请求。因此,解决方法是在JSON数据的新属性中设置选择字段值。
现在考虑一下,选择元素值一直都在正确绑定。只是没有按我认为的方式发送。