MultiSelectList验证失败

时间:2014-07-11 22:27:04

标签: c# entity-framework asp.net-mvc-5

我有这些课程:

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

此问题与this非常相似,解决方案可能仍然有效。有没有办法做到这一点,但避免将项目添加到集合中。

另外我有这个

    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}

1 个答案:

答案 0 :(得分:1)

您正试图将IEnumerable<string>放入IEnumerable<User>

如果您只需要用户,则可以将签名更改为此。

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

虽然最好的方法是创建一个viewmodel。

public class MyViewModel
{
    public Computer Computer { get; set; }
    public IEnumerable<string> SelectedUsers { get; set; }
}

public ActionResult Create(MyViewModel viewModel)
{
    ...
}