C# 参数'的输入为空;图书馆ID';不可为空的类型';System.Int32';对于方法';System.Web.Mvc.ActionResult PlaceCheckout(Int32,Int32)
我是MVC新手。在视图中,我试图将assetId和libraryId从视图发送到控制器,但是libraryId没有拾取,我试图找到解决方案,但没有任何运气 在视图中C# 参数'的输入为空;图书馆ID';不可为空的类型';System.Int32';对于方法';System.Web.Mvc.ActionResult PlaceCheckout(Int32,Int32),c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,我是MVC新手。在视图中,我试图将assetId和libraryId从视图发送到控制器,但是libraryId没有拾取,我试图找到解决方案,但没有任何运气 在视图中 @using (Html.BeginForm("PlaceCheckout", "Catalog", FormMethod.Post)) { @Html.HiddenFor(a=>a.AssetId) <div> Please insert a Library Card ID. @Html.TextBo
@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>
}
这些是我的扩展方法
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();
}
您的视图(@Html.TextBoxFor(a=>a.librarycardd)
)正在发送librarycardd而不是libraryId,您的控制器PlaceCheckout
操作需要两个不可为空的参数-assetId和libraryId(公共操作结果PlaceCheckout(int-assetId,int-libraryId)
)。由于未提供libraryId,因此将出现异常
请在LibraryCardId中修改控制器PlaceCheckout
操作,如下所示:
[HttpPost]
public ActionResult PlaceCheckout(int assetId, string libraryCardId )
{
// This extension method takes int version of libraryCardId
// So, am really not sure the datatype of libraryCardId
CheckOutService.Instance.CheckoutItem(assetId, libraryCardId );
return RedirectToAction("Details", new { id = assetId });
}
从粘贴在这里的另一个动作
Checkout
,我看到libraryCardId是字符串。因此,更新了PlaceCheckout
操作的第二个参数的数据类型。但是你的扩展方法说,libraryCardId是int。所以,我真的不确定libraryCardId的数据类型。因此,请相应地修复它。如果视图是PlaceCheckout,则应接受一个模型而不是两个参数,请尝试PlaceCheckout(CheckoutModel)
[HttpPost]
public ActionResult PlaceCheckout(int assetId, string libraryCardId )
{
// This extension method takes int version of libraryCardId
// So, am really not sure the datatype of libraryCardId
CheckOutService.Instance.CheckoutItem(assetId, libraryCardId );
return RedirectToAction("Details", new { id = assetId });
}