Я новичок в MVC. В представлении я пытаюсь отправить assetId и libraryId из представления в контроллер, однако libraryId не поднимается, я попытался найти решение, но безуспешно
В представлении
@using
(Html.BeginForm("PlaceCheckout",
"Catalog", FormMethod.Post))
{
@Html.HiddenFor(a=>a.AssetId)
<div>
Please insert a Library Card ID.
@Html.TextBoxFor(a => a.LibraryCardId)
</div>
div>
<button type="submit" class="btn btn-success btn-lg">Check out</button>
</div>
}
Код контроллера, LibraryCardId пропущен и устанавливается, когда пользователь вводит идентификатор для этой карты
public ActionResult Checkout(int id)
{
var asset = AssetService.Instance.GetByID(id);
var model = new CheckoutModel
{
AssetId = id,
ImageUrl = asset.ImageUrl,
Title = asset.Title,
LibraryCardId = "",
IsCheckedOut = CheckOutService.Instance.IsCheckedOut(id)
};
return View(model);
}
[HttpPost]
public ActionResult PlaceCheckout(int assetId, int libraryId)
{
CheckOutService.Instance.CheckoutItem(assetId, libraryId);
return RedirectToAction("Details", new { id = assetId });
}
Это мои методы расширения
public void CheckoutItem(int id, int libraryCardId)
{
using( var context = new LibraryContext())
{
if (IsCheckedOut(id))
return;
var item = context.LibraryAssets.Include(a => a.Status).First(a => a.Id == id);
context.Entry(item).State = EntityState.Modified;
UpdateAssetStatus(id, "Available");
var now = DateTime.Now;
var libraryCard = context.LibraryCards.Include(c => c.Checkouts).FirstOrDefault(c => c.Id == libraryCardId);
var checkout = new Checkout
{
LibraryAsset = item,
LibraryCard = libraryCard,
Since = now,
Until = GetDefaultCheckoutTime(now)
};
context.Checkouts.Add(checkout);
var checkoutHistory = new CheckoutHistory
{
CheckedOut = now,
LibraryAsset = item,
LibraryCard = libraryCard
};
context.CheckoutHistories.Add(checkoutHistory);
context.SaveChanges();
}