2011-07-01 48 views
3

我公司拥有一批Html.Listbox对我的看法正在被由IEnumberable<SelectListItem>ASP.net MVC列表框

人口控制有没有一种方式,填充数据时,有些项目会自动选择?

IEnumerable中的特定选择列表项目被标记为Selected = true,但这并未传达到视图中。

的视图是为这样:

<%= Html.ListBox("projects", Model.Projects)%> 

感谢。

回答

10

当然一如既往你开始通过定义将代表信息的视图模型,你想显示具体的看法:

public class MyViewModel 
{ 
    public string[] SelectedItems { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

然后控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      SelectedItems = new[] { "1", "3" }, 
      Items = new[] 
      { 
       new SelectListItem { Value = "1", Text = "Item 1" }, 
       new SelectListItem { Value = "2", Text = "Item 2" }, 
       new SelectListItem { Value = "3", Text = "Item 3" }, 
      } 
     }; 
     return View(model); 
    } 
} 

终于在您的强类型视图:

<%= Html.ListBoxFor(
    x => x.SelectedItems, 
    new SelectList(Model.Items, "Value", "Text") 
) %> 

如预期的那样项目1项目3将在列表框呈现时预选。

+0

优秀,按预期工作。当我向老板询问这个方法时,事实上我曾经做过,他说MVC模型应该是无状态的,我们不应该跟踪这样的数据。相反,它应该在View和Model之间传递数据,并处理仅传递的内容。那是对的吗?谢谢。 –