无法访问并通过前端将值分配到多对多关系的组合表中?

问题描述 投票:0回答:1

我正在尝试使用C#和EF以代码优先方法开发ASP.NET MVC应用程序。

我有两个类:演员和电影有多对多关系(一个演员可以在很多电影,一个电影可以有很多演员)。

一切正常,但我无法通过视图访问中间(MoviesActors)表(此表由于Actors和Movies之间的多对多关系而自动生成)。我想访问这个表,以便我可以分配正确的主键(例如:我想将正确的actor分配给电影,反之亦然),以确定诸如“特定演员扮演角色的电影中的角色?”之类的内容。和“特定电影的明星演员是什么?

这些是我的模特:

public class Actors
{
public Actors()
{
    this.mvz = new HashSet<Movies>();
}

public int Id { get; set; }
public string actor_name { get; set; }
public string country { get; set; }

public virtual ICollection<Movies> mvz { get; set; }
}

这是电影模型

  public class Movies
  {
  public Movies()
  {
    this.actz = new HashSet<Actors>();
  }

public int Id { get; set; }
public string Movie_title { get; set; }
public string genre { get; set; }

public virtual ICollection<Actors> actz { get; set; }
}

如您所见,两个模型之间存在多对多的关系,因此在包含复合键的数据库中生成第三个表。

到目前为止一切正常,但问题是我无法通过前端为复合键表分配值,虽然我可以从后端手动分配这些值。

我想问一下我的方法是否正确,我的意思是在现实世界的应用程序中,我们是否必须访问复合密钥表并分配值,还是有更好的方法来解决这个问题?

这是控制器:

 public ActionResult DataEntry()
 {
  return View();
 }

 [HttpPost]
 public ActionResult Add(??? mva)
 {
_context.act.Add(mva.act);
_context.mvz.Add(mva.mvz);
_context.SaveChanges();
return RedirectToAction("Index","Actors");
 }

以下是观点:

   @model 
   Many_To_Many_Relationship_Latest.ViewModel.MoviesActorsViewModel
   @{
   ViewBag.Title = "DataEntry";
   Layout = "~/Views/Shared/_Layout.cshtml";
   }

   <h5>Assign Actors to a particular Movie From Here</h5>

   @using (Html.BeginForm("Add","MoviesActors"))
  {
<div class="form-group">
@Html.LabelFor(a=> a.mvz.Id)
@Html.TextBoxFor(a=> a.mvz.Id, new { @class="forcontrol"})
</div>
<div class="form-group">
@Html.LabelFor(a => a.act.Id)
@Html.TextBoxFor(a => a.act.Id, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Save</button>
 }

这是ViewModel

  public class MoviesActorsViewModel
  {
  public Movies mvz { get; set; }
  public IEnumerable<Actors> act { get; set; }
  }

如果有这方面的专业知识的人正在阅读这篇文章,请用正确的逻辑或任何其他方法指导我,以帮助我获得结果。

c# asp.net-mvc ef-code-first
1个回答
0
投票

你需要在foreachlike下面使用act循环。

我不确定语法,因为它很长时间以来我都在研究MVC,但你可以参考逻辑。

@foreach (var item in a.act)
{
    @Html.LabelFor(@item.Id)
    @Html.TextBoxFor(@item.Id, new { @class = "form-control" })
}
© www.soinside.com 2019 - 2024. All rights reserved.