我试图通过点击按钮完成待办事项,从而将其从列表中删除。
我使用ActionLink作为按钮:
@foreach (var item in Model)
{
<li class="@item.Priority">
@item.Text
<div class="agile-detail">
@Html.ActionLink("Done", "Complete", "Home", new { id = item.ToDoId }, new { @class = "pull-right btn btn-xs btn-primary" })
<i class="fa fa-clock-o"></i> @item.Date
</div>
</li>
}
控制器中处理的非常短的动作:
public ActionResult Complete(int todoId)
{
using (var db = new KnightOwlContext())
{
DashboardHelper dashboardHelper = new DashboardHelper(db);
dashboardHelper.CompleteToDo(todoId);
return RedirectToAction("Index", "Home");
}
}
单击该按钮会生成以下URL:
我已经找到了一个解决方案,到目前为止它看起来可能是任何问题。此外,ActionLink按钮位于局部视图中,因此我不确定这是否会因错误的路由设置而发生变化?对于路由,我只是使用Visual Studio中MVC项目附带的默认配置。
在缩小问题原因时遇到问题,以便先检查哪里?
答案 0 :(得分:1)
方法中的参数为int todoId
,但您没有传递任何值 - 您只传递名为id
的参数的值。
将方法更改为
public ActionResult Complete(int id)
或更改链接以使用new { todoId = item.ToDoId }
,但这将添加查询字符串值,而不是路由值,除非您使用url: "Home/Complete/{todoId}"
创建特定路径定义