【问题标题】:ASP.net MVC ListboxASP.net MVC 列表框
【发布时间】:2011-07-01 19:50:58
【问题描述】:

我的视图上有许多 Html.Listbox 控件,这些控件由 IEnumberable<SelectListItem> 填充

有没有办法在填充数据时自动选择某些项目?

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

观点是这样的:

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

谢谢。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    请务必首先定义一个视图模型,该模型将代表您希望在特定视图上显示的信息:

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

    正如预期的那样,Item 1Item 3会在列表框被渲染时被预选。

    【讨论】:

    • 优秀,按预期工作。当我向我的老板询问这种方法时,实际上我以前做过什么,他说 MVC 模型应该是无状态的,我们不应该跟踪这样的数据。相反,它应该只在 View 和 Model 之间传递数据并只处理传递的内容。那是对的吗?谢谢。
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2012-04-15
    相关资源
    最近更新 更多