Model view controller DropdownListFor没有选择(谁猜到了?)

Model view controller DropdownListFor没有选择(谁猜到了?),model-view-controller,select,html.dropdownlistfor,Model View Controller,Select,Html.dropdownlistfor,我有一个下拉列表,它不能正确显示所选的值。它确实包含正确的元素,使用了正确的文本和值,但似乎没有办法让它真正选择正确的值 我得到的是: public class StateViewModel { public string Name { get; set; } public string Abbr { get; set; } } public class ChangeAddressViewModel { //edited down to what's needed

我有一个下拉列表,它不能正确显示所选的值。它确实包含正确的元素,使用了正确的文本和值,但似乎没有办法让它真正选择正确的值

我得到的是:

public class StateViewModel {
    public string Name { get; set; }
    public string Abbr { get; set; }
}

public class ChangeAddressViewModel {
    //edited down to what's needed
    public StateViewModel StateViewModel { get; set; }
    public IEnumerable<StateViewModel> StateViewModels { get; set; }
}

我看到您正在指定一个新的SelectList:

 @Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
    , "Abbr"
    , "Name"
    , Model.StateViewModel.Abbr)
    , @Resource.SelectState)
这将呈现列表的新实例,而不是您传递的实例!因此,您将没有选定的值

尝试将其设置为:

@Html.DropDownListFor(model => model.SelectedStateID,
                        Model.States
                        , new { id = "ddlStates" })
在您的控制器/视图模型中,填充SelectList,如下所示。我编写了自己的示例,因为它更简单。以下是ActionResult中控制器的代码:

  //Retrieve the list via LINQ/however and also the SelectedStateID
  var states = ....

   var statesList = new SelectList(states, "Abbr", "Name", SelectedStateID);


   var viewModel = new StateViewModel
    {
        //assign it to the corresponding ViewModel property
        States = statesList ,
                ...
                ...
    };

    return View( viewModel);  
您的ViewModel如下所示:

 private List<SelectListItem> _states = new List<SelectListItem>();
    public List<SelectListItem> States 
    {
        get
        {
            return (_states );
        }

        set
        {
            _states = value;
        }
    }

    public Guid SelectedStateID
    {
        get;
        set;
    }

我想你的右括号放错位置了

在您的查看页面上,页面顶部定义的模型是什么?是的。。。我现在可以用了。。。我将Model.StateViewModel更改为一个字符串,该字符串保存选定的值而不是选定的对象,并且出于某种原因,一切都很愉快?
 private List<SelectListItem> _states = new List<SelectListItem>();
    public List<SelectListItem> States 
    {
        get
        {
            return (_states );
        }

        set
        {
            _states = value;
        }
    }

    public Guid SelectedStateID
    {
        get;
        set;
    }
 @Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
                    , "Abbr"
                    , "Name")
, Model.StateViewModel.Abbr
, @Resource.SelectState)