路由到具有模型和ID的POST方法

时间:2019-01-18 14:05:11

标签: asp.net-mvc post asp.net-mvc-routing

我想将两个ID传递给我的方法。该方法称为DeleteAttendee,位于“培训”区域中我的SessionController上。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DeleteAttendee(int sessId, int attId)

我已经创建了一个链接,可以将您带到https://localhost:<port>/Training/Session/DeleteAttendee?sessId=1&attId=3

<a asp-action="DeleteAttendee" asp-route-attId="@item.Attendee.Id" asp-route-sessId="@Model.Id">Delete</a>

使用默认路由,找不到该页面。我需要更改或设置以路由到该方法吗?

编辑:显然问题是链接正在执行GET,但我需要将其发布。我该如何更改?

我认为您可以使用button控件完成我想做的事情。如果我可以传入模型和特定的ID,它实际上对我来说会更好。我尝试了下面的按钮。在标记中看起来正确,但是单击按钮后,id不断被sessionId取代。

<button formaction="/Training/Session/DeleteAttendee/@item.Id" formmethod="post">Edit</button>

2 个答案:

答案 0 :(得分:0)

您可以改用ActionLink吗?

@Html.ActionLink("Delete", "DeleteAttendee", "Session", new { sessId = Model.Id, attId = item.Attendee.Id })

答案 1 :(得分:0)

我最终使用了一个提交按钮,该按钮调用了javascript,并将其值添加到viewmodel中以完成此操作。

在页面上:

<input type="hidden" asp-for="SelectedAttendeeId" />
<input type="button" onclick="DeleteAttendee(@item.Id)" value="E" />

在javascript中:

function DeleteAttendee(attendeeId) {
  var selectedAtt = $('#SelectedAttendeeId');
  selectedAtt.val(attendeeId);
  var model = $('#frmSession').serialize();
  $.post('/Training/Session/DeleteAttendee', model, function (data) {
    // success logic here
  });
}