我有这些课程:
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}
答案 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)
{
...
}