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}
您正在尝试将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)
{
...
}