我将状态列表传递给Html.DropDownList。我一直在寻找一种方法来选择其中一个项目作为默认值,因此如果用户没有更改任何内容,则将正确的状态传递回模型。我发现的一切都涉及到列表中添加一个额外的值(通常是“null”选项)。
如何默认使用现有项目?
型号:
public class ListStatus
{
public string Name { get; set; }
public Guid StatusID { get; set; }
}
public class ViewModel
{
public List<ListStatus> Statuses { get; set; }
}
查看:
@Html.DropDownList("StatusID", Model.Statuses.Select(s => new SelectListItem() { Text = s.Name, Value = s.StatusID.ToString() }), new { @class = "medium", required = true })
示例数据:
'11111111-1111-1111-1111-111111111111': Option 1,
'22222222-2222-2222-2222-222222222222': Default,
'33333333-3333-3333-3333-333333333333': Option 3,
'44444444-4444-4444-4444-444444444444': Option 4
答案 0 :(得分:0)
如果您在控制器中构建List<SelectListItem>
并将其传回视图模型,则可以使用Selected
属性轻松找到您想要选择的那个。
https://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.118).aspx
public class ViewModel
{
public List<SelectListItem> Statuses { get; set; }
}
// in controller
ViewModel model = new ViewModel();
// assumes listStatuses is still your ListStatus type.
model.Statuses = listStatuses.Select(s => new SelectListItem() {
Text = s.Name,
Value = s.StatusID.ToString(),
// or whatever your criteria may be.
Selected = s.Name == "22222222-2222-2222-2222-222222222222"
})
现在,您不需要在视图中转换为新类型。
答案 1 :(得分:0)
您可以向ViewModel添加另一个字段,例如SelectedStatus,并将其值设置为所需的默认值。然后,您可以使用@ Html.DropDownListFor来显示默认值。
public class ViewModel
{
public Guid SelectedStatus {get;set;}
public List<ListStatus> Statuses { get; set; }
}
在您的控制器中
[HttpGet]
public ActionResult Index()
{
List<ListStatus> lstStatus = new List<ListStatus>(){
new ListStatus() { Name="X",StatusID = Guid.NewGuid() },
new ListStatus() { Name="Y",StatusID = Guid.NewGuid() },
new ListStatus() { Name="Z",StatusID = Guid.NewGuid() }
};
ViewModel objModel = new ViewModel();
objModel.Statuses = lstStatus;
objModel.SelectedStatus = lstStatus[1].StatusID; // Select whatever you want here to be default.
return View(objModel);
}
在你看来
@Html.DropDownListFor(m=>m.SelectedStatus, Model.Statuses.Select(s => new SelectListItem() { Text = s.Name, Value = s.StatusID.ToString() }), new { @class = "medium", required = true })