从DropDownList中选择默认值

时间:2017-01-31 22:45:44

标签: c# asp.net-mvc razor

我将状态列表传递给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

2 个答案:

答案 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 })

这是小提琴:https://dotnetfiddle.net/vTJhaj