【发布时间】:2018-01-21 07:04:20
【问题描述】:
我将视图和控制器放在这里,我的问题是在发布值后出现此错误:
参数字典包含“Landing.UI.Areas.cpanel”中方法“System.Web.Mvc.ActionResult DeleteQuestionDo(Int32)”的不可为空类型“System.Int32”的参数“id”的空条目。 Controllers.BestDestinationResultController'。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数
控制器:
[HttpPost]
public ActionResult DeleteQuestionDo(int id)
{
Logic.BestDestination.BestDestinationLogic bestDestLigic = new Logic.BestDestination.BestDestinationLogic();
bestDestLigic.deleteQuestion(id);
return RedirectToAction("DeleteQuestion");
}
查看:
@model Landing.UI.Areas.cpanel.Models.BestDestinationQuestionList
....
@Html.BeginForm("DeleteQuestionDo", "BestDestinationResult", FormMethod.Post)
{
@foreach (var m in Model.BestDestQuesList)
{
<input type="hidden" name="@m.QuestionId" />
<br />
<a href="@Url.Action("DeleteQuestionDo", "BestDestinationResult", new { id = m.QuestionId })">@m.Question</a>
<input name="@m.QuestionId" type="submit" value="حذف کامل سؤال" />
}
}
【问题讨论】:
-
您查看代码没有意义。您有一个包含多个隐藏输入的表单,其名称属性无效且无法绑定到任何内容,并且由于它没有
value属性,因此它不会提交任何值。您还可以使用与您的DeleteQuestionDo()方法相同的方法链接。 -
你到底想在这里做什么。您删除一个对象,因此它应该是一个
[HttpPost]方法,而不是 GET - 即从视图中删除您的链接。您应该拥有的是循环中的多个表单,并在 `BeginForm() 方法中添加路由值 -
sry that link(url.action) 是一个检查我的逻辑的测试,我为隐藏的输入添加了 value 属性,但我得到了同样的错误。
-
因为
name不匹配(您没有生成name="id"- 查看您生成的html)。但是视图没有意义——你有一个表单,但有多个输入。当您点击提交按钮时,它会回发每个输入的所有名称/值对! (同样,您需要创建多个表单,每个问题一个) -
我把 beginForm 放在 foreach 中,但还是一样的错误!
标签: c# asp.net-mvc