通过控制器和视图模型定义选择列表

本文关键字:定义 选择 列表 模型 视图 控制器 | 更新日期: 2023-09-27 18:36:50

我有一个视图模型,看起来像这样:

public class SomeViewModel
{
    public SomeViewModel(IEnumerable<SelectListItem> orderTemplatesListItems)
    {
        OrderTemplateListItems = orderTemplatesListItems;
    }
    public IEnumerable<SelectListItem> OrderTemplateListItems { get; set; }
}

然后,我的控制器中有一个Action执行以下操作:

    public ActionResult Index()
    {   
        var items = _repository.GetTemplates();
        var selectList = items.Select(i => new SelectListItem { Text = i.Name, Value = i.Id.ToString() }).ToList();
        var viewModel = new SomeViewModel
            {
                OrderTemplateListItems = selectList
            };
        return View(viewModel);
    }

最后我的观点是:

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text"), "Please select an order template")

代码工作正常,我的选择列表填充得很好。接下来我需要做的是设置来自用户从列表中选择特定选项时设置的Session["orderTemplateId"]的选定值。

现在在线查看后,第四个参数应该允许我设置一个选定的值,所以如果我这样做:

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text", 56), "Please select an order template")

56是我要选择的项目的ID,但无济于事。然后我想为什么不在控制器中执行此操作?

作为最后一次尝试,我尝试在控制器中构建我的选择列表项,然后将这些项传递到视图中:

  public ActionResult Index()
  {   
      var items = _repository.GetTemplates();
      var orderTemplatesList = new List<SelectListItem>();
  foreach (var item in items)
  {
      if (Session["orderTemplateId"] != null)
      {
          if (item.Id.ToString() == Session["orderTemplateId"].ToString())
          {
              orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString(), Selected = true });
          }
          else
          {
              orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString() });
          }
      }
      else
      {
          orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString() });
      }
  }
  var viewModel = new SomeViewModel
      {
          OrderTemplateListItems = orderTemplatesList
      };
  return View(viewModel);
  }

离开我的观点如下:

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text"), "Please select an order template")

无!

为什么这对我不起作用?

通过控制器和视图模型定义选择列表

你说"56 是我要选择的项目的 ID,但无济于事"

您引用的第四个参数应该是字符串,而不是整数,如下所示:

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text", "56"), "Please select an order template")