我得到了以下模型:
public class ViewBloqueioNotaFiscal
{
public ViewComboStatus ComboStatus = new ViewComboStatus();
public class ViewComboStatus
{
public int? IdStatusSelecionado { get; set; }
public IEnumerable<SelectListItem> ComboStatus { get; set; }
}
}
以下控制器方法:
public ViewBloqueioNotaFiscal.ViewComboStatus geraComboStatus(int? statusSelecionado)
{
ViewBloqueioNotaFiscal.ViewComboStatus combo = new ViewBloqueioNotaFiscal.ViewComboStatus
{
IdStatusSelecionado = statusSelecionado,
ComboStatus = new[]{
new SelectListItem { Value = 1, Text = "Op1"},
new SelectListItem { Value = 2, Text = "Op2"}
}
};
return combo;
}
我的aspx就像:
<%: Html.DropDownListFor(x => x.ComboStatus.IdStatusSelecionado, Model.ComboStatus.ComboStatus) %>
它完美地显示了选择但是当我提交我的表单时,我从控制器发布的post方法使用除了这个组合之外的值完全获得模型,我接收到模型中的空值。作为我尝试的第一个,我觉得有些不对劲。
你能帮我检查一下吗?如果你有更好的解决方案,我也想知道。
感谢您的帮助!
答案 0 :(得分:2)
您没有绑定到视图模型的正确属性。你绑定到一些没有意义的复杂对象(ComboStatus
)。
您应该将下拉列表绑定到IdStatusSelecionado
属性:
<%: Html.DropDownListFor(
x => x.ComboStatus.IdStatusSelecionado,
Model.ComboStatus.ComboStatus
) %>
强类型的DropDownListFor帮助程序在视图模型上至少需要两件事:
如果值/文本对的集合包含一个值等于您用作第一个参数的标量属性的项目,则将预先选择此项目。例如,如果您想预先选择示例中的第二项,则应在视图模型上设置IdStatusSelecionado=2
。
旁注:Model.ComboStatus.ComboStatus
看起来很糟糕。请重命名。