ActionLink删除确认

Sub*_*bby 3 asp.net-mvc actionlink

我想制作一个Javascript弹出窗口,询问我是否要删除列表.

这是我现在所拥有的(不起作用 - 当被控制器捕获时,Guid为null).

@Html.ActionLink("Delete", "Delete", "Listing", listing.Guid, new { onclick = "return confirm('Are you sure you want to delete this listing?')" })
Run Code Online (Sandbox Code Playgroud)

第一个Delete是字符串,第二个Delete是方法的ActionName,Listing是Controller名称,listing.Guid是我要发送的参数,最后,当然,onclick是Javascript.

知道我可能会走错路吗?

编辑另外,任何想法如何我有一个更漂亮的确认对话框?使用Bootstrap.

Dar*_*rov 9

您可以使用匿名对象传递路由值:

@Html.ActionLink(
    "Delete", 
    "Delete", 
    "Listing", 
    new { id = listing.Guid }, 
    new { onclick = "return confirm('Are you sure you want to delete this listing?')" }
)
Run Code Online (Sandbox Code Playgroud)

和相应的控制器动作:

public ActionResult Delete(Guid id)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

是的,使用ActionLinks和GET请求调用正在修改服务器状态的操作(例如删除某些内容)是一个非常糟糕的主意.更好的方法是在这种情况下使用正确的HTTP谓词 - DELETE.但由于HTML表单不普遍支持此动词,您可以使用AJAX或使用POST动词:

@using (Html.BeginForm("Delete", "Listing", new { id = listing.Guid }, FormMethod.Post, new { onsubmit = "return confirm('Are you sure you want to delete this listing?');" }))
{
    @Html.HttpMethodOverride(HttpVerbs.Delete)
    <button type="submit">Delete</button>
}
Run Code Online (Sandbox Code Playgroud)

和你各自的控制器动作:

[HttpDelete]
public ActionResult Delete(Guid id)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)