参数字典包含参数' restaurantId'的空条目。非可空类型&Systems.Int32

时间:2016-04-18 07:53:20

标签: c# asp.net asp.net-mvc

我是堆栈溢出的新手。我开始创建一个MVC应用程序而不是使用Map.Route我使用绑定属性来传入id。下面显示了每个类/组件的错误和代码。

  

参数字典包含参数的空条目   ' restaurantId'非可空类型的System.Int32'方法   ' System.Web.Mvc.ActionResult Index(Int32)'在   ' OdeToFood.Controllers.ResturantReviewsController&#39 ;.可选的   参数必须是引用类型,可空类型或声明为   一个可选参数。

模型

public class ResturantReview
{
    public int Id { get; set; }
    public int Rating { get; set; }
    public string Body { get; set; }
    public string ReviewerName { get; set; }
    public int ResturantId { get; set; }

}

Controller
public class ResturantReviewsController : Controller
    {
        private OdeToFoodDb _db = new OdeToFoodDb();

        public ActionResult Index([Bind(Prefix = "id")] int restaurantId)
        {
            var restaurant = _db.Resturants.Find(restaurantId);
            if (restaurant != null)
            {
                return View(restaurant);
            }
            return HttpNotFound();
        }

        [HttpGet]
        public ActionResult Create(int restaurantId)
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(ResturantReview review)
        {
            if (ModelState.IsValid)
            {
                _db.Reviews.Add(review);
                _db.SaveChanges();
                return RedirectToAction("Index", new { id = review.ResturantId });
            }
            return View(review);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _db.Dispose();
            }
            base.Dispose(disposing);
        }

查看

@model OdeToFood.Models.Resturant

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@Html.Partial("View", Model.Reviews)
<p>
    @Html.ActionLink("Create New", "Create", new { restaurantId = Model.Id })
</p>

1 个答案:

答案 0 :(得分:2)

从看到你有行动

 public ActionResult Index([Bind(Prefix = "id")] int restaurantId)

删除绑定属性

 public ActionResult Index(int id)

绑定前缀表示您将POST / Get参数作为id.restaurantId。并且您希望捕获默认路由,它将从URL读取id,如ResturantReviews / Index / 2