我正在尝试将ID传递给我的购物篮,但我一直收到错误
参数字典包含参数'id'的空条目 方法的非可空类型'System.Int32' 'System.Web.Mvc.ActionResult AddToBasket(Int32,Int32)'中 'UberUnlock.Controllers.BasketController'。必须有一个可选参数 是引用类型,可空类型,或声明为可选 参数。参数名称:参数
我没有意识到什么是错的,当我只引用一个模型
时,我的代码工作正常@model UberUnlock.Product
在视图的顶部,但每当我尝试通过ModelView添加两个模型
时@model UberUnlock.ViewModel.MultipleModelInOneView
我一直收到上面提到的错误,谢谢。
这是我的查看代码
@model UberUnlock.ViewModel.MultipleModelInOneView
<dd>
@using (Html.BeginForm("AddToBasket", "Basket"))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.Products.ID)
@Html.DropDownList("quantity", Enumerable.Range(1, 10).Select(i => new SelectListItem { Text = i.ToString(), Value = i.ToString() }))
<input type="submit" class="btn btn-primary btn-default margin" value="Add to Basket">
}
</dd>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.Products.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
这是我的ViewModel代码
using UberUnlock.Models;
namespace UberUnlock.ViewModel
{
public class MultipleModelInOneView
{
public Order Orders { get; set; }
public Product Products { get; set; }
}
}
我的BasketController代码
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddToBasket(int id, int quantity)
{
Basket basket = Basket.GetBasket();
basket.AddToBasket(id, quantity);
return RedirectToAction("Index");
}
这是一个ProductController(这是我的View的控制器)
public ActionResult Details(int? id)
{
var model = new MultipleModelInOneView();
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
model.Products = db.Products.Find(id);
if (model.Products == null)
{
return HttpNotFound();
}
return View(model);
}
答案 0 :(得分:1)
您没有传递控制器方法,ID和数量所需的参数。在你的Html.BeginForm中添加id和quantity的值。
@model UberUnlock.ViewModel.MultipleModelInOneView
<dd>
@using (Html.BeginForm("AddToBasket", "Basket", new { id = Model.Products.ID,quantity = quantityvalue }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.Products.ID)
@Html.DropDownList("quantity", Enumerable.Range(1, 10).Select(i => new SelectListItem { Text = i.ToString(), Value = i.ToString() }))
<input type="submit" class="btn btn-primary btn-default margin" value="Add to Basket">
}
</dd>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.Products.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
或者,如果您不想一直传递任何值,则可以使控制器中的参数为空。或者如Rahul所指出的,你可以将它们设置为0。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddToBasket(int? id, int? quantity)
{
Basket basket = Basket.GetBasket();
basket.AddToBasket(id, quantity);
return RedirectToAction("Index");
}
或者另一种方法是删除参数id和数量并传递视图模型。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddToBasket(MultipleModelInOneView model)
{
Basket basket = Basket.GetBasket();
basket.AddToBasket(model.Product.ID, model.Product.quantity);
return RedirectToAction("Index");
}