MultiSelectList验证失败

本文关键字:失败 验证 MultiSelectList | 更新日期: 2023-09-27 18:12:30

我有这些类:

public class User
{
   [Key]
   public Guid Id { get; set; }
}
 public class Computer 
{
   public int Id { get; set; }
   public virtual ICollection<User> Users { get; set; }
}

我的动作看起来像这样:

public ActionResult Create([Bind(Include = "Users")] Computer computer)
{
   if (ModelState.IsValid)
   {
      ...
   }
   var userList = _useRepository.GetAll();
   ViewBag.travelers = new MultiSelectList(userList, "Id", "Name");
   return View(travelRequest);
 }

我的观点:

@Html.ListBox("Travelers", (MultiSelectList)ViewBag.travelersList, new { @class = "form-control" }) 

这个问题与这个非常相似,解决方案可能仍然有效。是否有一种方法可以做到这一点,但避免将项目添加到集合。

另外我还有这个

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
        modelBuilder.Entity<TravelRequest>()
            .HasMany(x => x.Travelers)
            .WithMany()
            .Map(m =>
            {
                m.MapLeftKey("TravelReqeustId");
                m.MapRightKey("UserId");
                m.ToTable("Travelers");
            });

    }

我在OnModelCreating中没有修改过,但我仍然得到相同的错误。

验证失败,值无效。

Exception   {"The parameter conversion from type 'System.String' to type 
'User' failed because no type converter can convert 
between these types."}  System.Exception {System.InvalidOperationException}

MultiSelectList验证失败

您正在尝试将IEnumerable<string>放入IEnumerable<User>

如果你只需要用户,你可以把你的签名改成这个。

public ActionResult Create(IEnumerable<string> users)
{
    ...
}

虽然最好的方法是创建一个视图模型。

public class MyViewModel
{
    public Computer Computer { get; set; }
    public IEnumerable<string> SelectedUsers { get; set; }
}
public ActionResult Create(MyViewModel viewModel)
{
    ...
}