Control没有从DropDownListFor获取Selected值

时间:2011-10-19 17:22:20

标签: asp.net asp.net-mvc asp.net-mvc-2

我得到了以下模型:

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方法使用除了这个组合之外的值完全获得模型,我接收到模型中的空值。作为我尝试的第一个,我觉得有些不对劲。

你能帮我检查一下吗?如果你有更好的解决方案,我也想知道。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您没有绑定到视图模型的正确属性。你绑定到一些没有意义的复杂对象(ComboStatus)。

您应该将下拉列表绑定到IdStatusSelecionado属性:

<%: Html.DropDownListFor(
    x => x.ComboStatus.IdStatusSelecionado, 
    Model.ComboStatus.ComboStatus
) %>

强类型的DropDownListFor帮助程序在视图模型上至少需要两件事:

  1. 将用于绑定到
  2. 的标量属性(int,decimal,string,...)
  3. 价值/文字对的集合。
  4. 如果值/文本对的集合包含一个值等于您用作第一个参数的标量属性的项目,则将预先选择此项目。例如,如果您想预先选择示例中的第二项,则应在视图模型上设置IdStatusSelecionado=2

    旁注:Model.ComboStatus.ComboStatus看起来很糟糕。请重命名。