2013-10-25 115 views
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,但无济于事。然后我想,为什么不在控制器中做?

当我试图在我的控制器建立我的选择列表项,然后使物品进入查看最后的努力:

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

什么也没有!

为什么这不适合我?

回答

0

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

如果您所指的第四个参数是一个字符串,而不是一个整数,比如:

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

感谢您的回答。我已经尝试过,并使用文本字段设置选定的值,但也没有工作。 –

相关问题