В настоящее время я делаю проект, изучая 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 });
}
Вопрос в том, как мне получить mov ie и актеров из этой формы, которые я передал контроллеру? Есть ли другой способ передать список проверенных актеров и mov ie в контроллер вместо использования HTML BeginForm?
UPD. Я обнаружил, что данные будут быть связанным, если я использую HTML BeginForm, поэтому вместо передачи FormCollection в контроллер я попытался передать mov ie и список актеров, чтобы посмотреть, поможет ли это мне каким-либо образом. Итак, теперь контроллер, который сохраняет результаты в 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. Кажется, список пуст. Также я считаю, что у меня нет экземпляра mov ie. Теперь я действительно застрял здесь.