В настоящее время я делаю проект, изучая asp.net mvc5. У меня есть отношения «многие ко многим» в моей базе данных, и я работаю над решением, позволяющим прикрепить определенных актеров из одной таблицы к фильмам из другой таблицы. Вот модели для них.
public class Movie
{
public Movie()
{
this.Actors = new HashSet<Actor>();
this.Customers = new HashSet<Customer>();
}
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Genre { get; set; }
[Required]
public DateTime ReleaseDate { get; set; }
[Required]
public DateTime AddDate { get; set; }
public virtual ICollection<Actor> Actors { get; set; }
public virtual ICollection<Customer> Customers { get; set; }
}
public class Actor
{
public Actor()
{
this.Movies = new HashSet<Movie>();
}
public int id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Movie> Movies { get; set; }
public DateTime BirthDate { get; set; }
}
Поэтому я придумал проверять актеров на странице AddActors и добавлять их в выбранный фильм. Вот как это выглядит:
@model Movie_Rentals.ViewModels.AddActorViewModel
@{
ViewBag.Title = "AddActors";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Add Actors Form</h2>
@using (Html.BeginForm("SaveActors", "Movies"))
{
foreach (var a in Model.Actors)
{
<ul>
<input type="checkbox" name="addactors" value="@Model.Actors" />
@Html.DisplayFor(modelItem => a.Name);
<br />
</ul>
}
@Html.HiddenFor(m => m.Movie)
<button type="submit" class="btn btn-primary">Save</button>
}
После отправки формы попадаем в контроллер
public ActionResult SaveActors(FormCollection formCollection)
{
var movieInDb = /*???*/;
{
foreach (/*var actor in formCollection*/)
{
movieInDb.Actors.Add(actor);
}
_context.SaveChanges();
}
return RedirectToAction("Details", "Movies", new { id = movieInDb.Id });
}
Вопрос в том, как мне получить фильм и актеров из этой формы, которую я передал контроллеру? Есть ли другой способ передать список проверенных актеров и фильм контроллеру вместо использования HTML BeginForm?
UPD. Я обнаружил, что данные будут связаны, если я использую HTML BeginForm, поэтому вместо передачи FormCollection контроллеру я попытался передать фильм и список актеров, чтобы увидеть, будет ли это помогите мне любым способом. Итак, теперь контроллер, который сохраняет результаты в Db, выглядит так
public ActionResult SaveActors(List <Actor> actors, Movie movie)
{
foreach (var a in actors)
{
movie.Actors.Add(a);
}
_context.SaveChanges();
return RedirectToAction("Details", "Movies", new { id = movie.Id });
}
Но я получаю исключение System.NullReferenceException. Кажется, список пуст. Также я считаю, что на самом деле у меня нет экземпляра фильма. Теперь я действительно застрял здесь.