【问题标题】:Choose Default Value from DropDownList从下拉列表中选择默认值
【发布时间】:2017-01-31 22:45:43
【问题描述】:

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

【问题讨论】:

  • 您绑定到您传递给视图的模型的StatusID 属性,因此只需设置StatusID 的值以匹配控制器中的选项值之一,然后再将模型传递给视图,它将被选中——这就是模型绑定的工作方式。如果视图模型不包含属性Guid StatusID,则添加一个(并且您应该使用强类型@Html.DropDownListFor(m =&gt; m.StatusID, Model.Statuses),其中StatusesIEnumerable&lt;SelectListItem&gt;,并且您在控制器中生成SelectList,而不是视图。

标签: c# asp.net-mvc razor


【解决方案1】:

您可以向 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

【讨论】:

    【解决方案2】:

    如果您在控制器中构建List&lt;SelectListItem&gt; 并将其传递回视图模型,您可以使用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"
    })
    

    现在您也不需要在视图中转换为新类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多