我有以下型号
public class PageConfig : Base
{
// Properties Etc..
public ICollection<Image> ScrollerImages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的方法是使用联结表{PageConfigID,ImageID}进行绑定.
在我的模型活页夹中我尝试了以下..
modelBuilder.Entity<PageConfig>()
.HasMany(x => x.ScrollerImages)
.WithMany()
.Map(x =>
{
x.ToTable("junc_PageConfigScrollerImages");
x.MapLeftKey("PageConfigID");
x.MapRightKey("ImageID");
});
Run Code Online (Sandbox Code Playgroud)
这导致图像的空集合.
如何将这些图像绑定到PageConfig模型?
编辑
大多数问题是由于用户错误.这发生在你身上......
检查数据库中的键约束是否已正确设置.
模型上的ICollection NEEDS是虚拟的.
c# entity-framework one-to-many model-binding junction-table
所以,基本上目标是:
用户从选择列表中为一本书(流派)选择多个“类别”。一些例子是:
用户选择 1 个或多个(如此多个)后,他们会将书籍保存到数据库中。
就功能而言,当我处理单一类型(该类型被保存为单个字符串)时,一切都运行良好,但我需要支持多种类型。
我做的第一件事就是简单地将string Categoryto更改为List<string> Categories,但这导致了此处看到的错误:StackOverflow 问题,该问题已解决
我尝试了“TuPack”提供的解决方案,该错误消失了......但它导致了一个全新的问题问题。
您已经了解了我现在的情况:为了从我的 中获得任何结果<select></select> ,我必须这样做:
<select asp-for="CategoryIds[0].CategoryId" asp-items="ViewBag.Language"
class="form-control" multiple="multiple">
<option value="">Please choose book language</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这当然有效......用于获取用户选择的第一个类别。仅此而已。
至于到目前为止的代码,从相关性角度来看......我将切断与数据库相关的内容,因为问题早在那时就发生了:
控制器:
public async Task<ViewResult> AddNewBookAsync(bool isSuccess = false, int bookId = 0)
{
var model = new BookModel();
ViewBag.Language = new SelectList(await _languageRepository.GetLanguages(), "Id", "Name");
ViewBag.IsSucess = isSuccess;
ViewBag.BookId = bookId;
return View(model);
}
[HttpPost]
public async Task<IActionResult> AddNewBook(BookModel bookModel)
{
if (ModelState.IsValid)
{ …Run Code Online (Sandbox Code Playgroud)