DropdownListFor不选择(谁猜了?)

| 我有一个下拉列表,不会正确显示所选值。它确实具有正确的元素,具有正确的文本和值,但是似乎没有办法使它实际上选择正确的值。 我所拥有的是:
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; }
}
我尝试过的
@Html.DropDownListFor(model => model.StateViewModel
    , Model.StateViewModels.Select(x => new SelectListItem {
         Text = x.Name,
         Value = x.Abbr,   
         Selected = x.Abbr == Model.StateViewModel.Abbr
         })
    , @Resource.SelectState)

//i\'ve stepped through the lambda above and the expression 
//x.Abbr == Model.StateViewModel.Abbr 
//did evaluate to true for one of the iterations

@Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
    , \"Abbr\"
    , \"Name\"
    , Model.StateViewModel.Abbr)
    , @Resource.SelectState)
    
已邀请:
我看到您正在指定一个新的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\" })
然后在您的Controller / ViewModel中,如下所示填充SelectList。我编写了自己的示例,因为它很容易。以下是ActionResult中Controller的代码:
  //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;
    }
我假设这是您的问题,并且您实际上不想拥有一个新列表,并且还选择了该列表中的一个值作为默认值。 如果是这种情况,请尝试以下操作:
 @Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
                    , \"Abbr\"
                    , \"Name\")
, Model.StateViewModel.Abbr
, @Resource.SelectState)
我认为您的右括号位置错误!     

要回复问题请先登录注册