【问题标题】:MultiSelectList doesn't return view dataMultiSelectList 不返回视图数据
【发布时间】:2011-04-18 14:05:54
【问题描述】:

我的视图中有一个多选列表,用于向控制器发送用户列表。我的视图接收用户,但不发送回控制器。我错过了什么?

我的控制器是:

        // GET:
    public ActionResult Create(User user)
    {
        ViewModel model = new ViewModel();

        Interaction interact = new Interaction();

        model.Users= Repository.GetUsers();
        model.Interacao = interact;

        return View( model );
    }

在我看来,listBox 是:

@Html.ListBoxFor( model => model.Users, new MultiSelectList( Model.Users, "Id", "Name" ) )

谁能告诉我哪里错了?

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    您不应将model.Users 绑定为第一个参数,因为它代表一个列表。第一个参数需要是一个包含所选值的字符串/整数数组:

    例子:

    public class MyViewModel
    {
        pubilc string[] SelectedUserIds { get; set; }
        public IEnumerable<UserViewModel> Users { get; set; }
    }
    
    public class UserViewModel
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }
    

    然后:

    @Html.ListBoxFor( 
        model => model.SelectedUserIds, 
        new MultiSelectList(Model.Users, "Id", "Name") 
    )
    

    将成功绑定到:

    [HttpPost]
    public ActionResult Index(string[] selectedUserIds) { ... }
    

    或:

    [HttpPost]
    public ActionResult Index(MyViewModel model) { ... }
    

    当然,在第二种情况下,您只会填充 SelectedUserIds 属性,因为这是视图发送的唯一内容。如果您需要重新显示相同的视图(例如由于模型错误),您需要重新填充 vie 模型的 Users 集合属性,因为它不会被持久化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2018-04-16
      • 1970-01-01
      • 2017-02-09
      • 2012-01-18
      相关资源
      最近更新 更多