0

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

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,但无济于事。然后我想为什么不在Controller中做呢?

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

  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")

没有什么!

为什么这对我不起作用?

4

1 回答 1

0

您说“56 是我要选择的项目的 ID,但无济于事”

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

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text", "56"), "Please select an order template")
于 2013-10-25T21:51:53.043 回答