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)