ASP.NET MVC jQuery删除链接
在最近的一个帖子里,Stephen Walther指出了使用过一个超链接来删除数据的危险性。这篇文章对这方面问题进行了很好的阐述。不过这类问题不仅仅局限于删除操作。任何时候,你如果允许一个GET请求来修改数据的话,你就可能实在自找麻烦。这里有一个很久以前发生在BackPack身上的故事,你可以看一下就知道我的意思了。
之所以jQuery删除操作值得我们格外注意是因为这是最常见的一个使用超链接修改信息的情况。如果你要修改一个产品记录,那你可能会采用一个表格(form)。不过删除操作通常只需要一个参数(就是要删除记录的id),而我们很容易在GET请求的URL中夹带这个唯一的参数。
如果你在使用jQuery,一个很简单的将任何超链接转换成POST连接的方法是通过将以下代码赋给onclick属性值:
$.post(this.href); return false;
比如
< a href="/go/delete/1" onclick="$.post(this.href); return false;">Delete< /a>
这段代码会向/go/delete/1发送一个POST请求而不是一个GET请求。当然,你也需要在服务器端做必要的规定,在asp.net mvc中,这很简单:
[AcceptVerbs(HttpVerbs.Post)]public ActionResult Delete(int id) { //Delete that stuff!}
AcceptVerbs属性规定了这个action方法只响应POST请求,而GET请求将被忽略。
至此,你应该很容易编写专门用于delete链接的帮助函数了。我通常会编写很专用的帮助函数,比如:Html.DeleteProduct或Html.DeleteQuestion. 这里有我正在编写的一个示例程序中的一段jQuery删除功能的代码:
public static string DeleteAnswerLink(this HtmlHelper html, string linkText , Answer answer) { return html.RouteLink(linkText, "answer", new { answerId = answer.Id, action = "delete" }, new { onclick="$.post(this.href); return false;" });}
相关推荐
EdwardSiCong 2020-11-23
85477104 2020-11-17
hhanbj 2020-11-17
81427005 2020-11-11
seoppt 2020-09-13
honeyth 2020-09-13
WRITEFORSHARE 2020-09-13
84483065 2020-09-11
momode 2020-09-11
85477104 2020-08-15
83510998 2020-08-08
82550495 2020-08-03
tthappyer 2020-08-03
84901334 2020-07-28
tthappyer 2020-07-25
TONIYH 2020-07-22
tztzyzyz 2020-07-20
83510998 2020-07-18
81463166 2020-07-17