我正在建立一个有产品的网站,您可以对产品发表评论。我在产品页面上有一个链接,上面写着“发表评论”
在我的代码中,它看起来像这样:
@Html.ActionLink("Leave a Review", "AddReview", "Product", new { id = Model.ProductId }, null)
当我运行我的应用程序时,链接工作正常,但是当我提交评论时它崩溃并说:
参数字典包含“MyProject.Controllers.ProductController”中方法“System.Web.Mvc.ActionResult Product(System.String, Int32)”的不可空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
仅当我new { id = Model.ProductId }
的 ActionLink 中有此错误时才会发生此错误。
这可能看起来像 ProductId 为空,但这是不可能的。要首先加载产品页面,需要一个 ProductId,另外我使用了一个 RenderAction,它使用相同的 id 在页面上显示有关该产品的评论:
@{Html.RenderAction("Reviews", "product", new { id = Model.ProductId});}
所以基本上,为什么我会收到这个错误?它与 GET 和 POST AddReview 方法有关吗?我认为它不应该考虑链接会拉取 GET 并且当我提交表单时它应该是 POST。如何将 productId 放入表单中?
编辑 回答一些问题:
我的表格如下所示:
@using (Html.BeginForm("AddReview", "Product"))
{
<p>Title @Html.TextBoxFor(x => x.Title)</p>
<p>Rating: @Html.TextBoxFor(x => x.Rating)</p>
<p>Body: @Html.TextBoxFor(x => x.Body)</p>
<input type="submit" value="Save"/>
Html.ActionLink("Cancel", "Index", "Home");
}
我生成的标签如下所示:
<a href="/Product/AddReview?ProductId=9">Leave a Review</a>
编辑
在修复了链接问题后,我意识到我仍然收到错误的原因是因为我的控制器中的 RedirectToAction 调用被破坏了。多么愚蠢的错误!