3

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

这是我目前所拥有的(不起作用 - 控制器捕获时 Guid 为空)。

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

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

知道我可能会在哪里出错吗?

编辑另外,知道我怎样才能有一个更漂亮的确认对话框吗?使用引导程序。

4

1 回答 1

9

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

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

以及相应的控制器动作:

public ActionResult Delete(Guid id)
{
    ...
}

是的,使用 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>
}

以及您各自的控制器操作:

[HttpDelete]
public ActionResult Delete(Guid id)
{
    ...
}
于 2012-09-18T11:46:26.597 回答