У меня есть две таблицы Movie и Rental в локальной базе данных.В Rental есть поле под названием itemID, которое является внешним ключом для ссылки на id в Movie.
Я использовал Entity Framework для двух таблиц, которые, в свою очередь, создают следующие два класса:
public partial class Movie
{
public int id { get; set; }
public string name { get; set; }
public virtual Rental Rental { get; set; }
}
public partial class Rental
{
public int id { get; set; }
public int itemID { get; set; }
public string renterName { get; set; }
public System.DateTime date { get; set; }
public virtual Movie Movie { get; set; }
}
Я хочу создать объект Rental в RentalController, находясь в / Movie / Details / 2.Таким образом, я изменил Movie / Details.cshtml следующим образом:
@model Project.Models.Movie
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.name)
</dt>
<dd>
@Html.Raw(Model.name)
</dd>
<dd>
@using (Html.BeginForm("Create", "Rental", new { id = Model.id, returnURL = HttpContext.Current.Request.Url.AbsolutePath }, FormMethod.Post, new { @id = "createForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<a class="navbar-nav" href="javascript:document.getElementById('createForm').submit()">Rent</a>
}
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.id }) |
@Html.ActionLink("Back to List", "Index")
</p>
Вот где я заблудился.Как создать объект Rental и правильно сохранить его в базе данных?
public class RentalController : Controller
{
private CatalogEntities db = new CatalogEntities();
// POST: Rental/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(int id, string returnURL)
{
Rental rental = new Rental() { itemID = id, renterName = "User" };
db.Rentals.Add(rental);
db.SaveChanges();
return Redirect(returnURL);
}
}
Хотя после нажатия на Rent я не получил ошибку, запись в таблице Rental не добавляется.,Интересно, так ли это, потому что объект аренды имеет нулевую ссылку на свойство фильма, а этот конкретный объект фильма не имеет ссылки на объект аренды.Несмотря на это, я не могу понять, как передать этот объект Movie из вида в контроллер.