如何使用带有 asp.net 的 jQuery 进行 onclientclick 回发
Posted
技术标签:
【中文标题】如何使用带有 asp.net 的 jQuery 进行 onclientclick 回发【英文标题】:How do I make an onclientclick post back using jQuery with asp.net 【发布时间】:2010-09-15 07:41:48 【问题描述】:我想在不使用更新面板进行回发的情况下重新创建更新面板回发。这样做的通用方法是什么?
例如,在 *** 上,当您对某个问题投赞成票或反对票时,它会回发以更新数据库,我敢打赌他们没有使用更新面板。
我有什么?
我有一个包含表格数据的表格。当我单击td
项目作为整个列时,我想更新数据库并更新页面本身的gridview。 gridview 显示了表格中所有当前点击的项目,因为它是通过“我们的方法”更新的。
寻找一个好的通用方法,我可以在没有更新面板的情况下用于大量异步回发。
【问题讨论】:
【参考方案1】:Stack Overflow 的工作方式在两个重要方面与 CodeProject 文章不同。
Stack Overflow 正在针对 ASP.NET MVC 控制器操作而不是独立的 ASPX 页面发出 AJAX 请求。您可能会将其视为 ASP.NET AJAX 页面方法的 MVC 类似物。在这两种情况下,ASPX 方法在性能方面都会落后。
Stack Overflow 的 AJAX 请求返回 JSON 序列化结果,而不是任意纯文本或 html。这使得在客户端的处理更加标准化并且通常更清洁。
例如:当我投票支持这个问题时,向 /questions/171000/vote 发出了一个 XmlHttpRequest 请求,POST 数据中的“voteTypeId”为 2。
处理请求的控制器将我的投票添加到某处的表格中,然后使用此 JSON 进行响应:
"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2
使用该信息,此 javascript 负责更新客户端显示:
var voteResult = function(jClicked, postId, data)
if (data.Success)
jClicked.parent().find("span.vote-count-post").text(data.NewScore);
if (data.Message)
showFadingNotification(jClicked, data.Message);
else
showNotification(jClicked, data.Message);
reset(jClicked, jClicked);
if (data.LastVoteTypeId)
selectPreviousVote(jClicked, data.LastVoteTypeId);
;
如果您使用的是 WebForms,那么您在我的博客上找到的调用页面方法的示例绝对是正确的。
但是,我建议您考虑将 Web 服务用于任何集中式功能(例如这个投票示例),而不是页面方法。页面方法似乎更容易编写,但它们也有一些重用缺点,并且往往会提供一种实际上并不存在的附加安全性的错觉。
这是一个执行与您发现的相同的事情的示例,但使用 Web 服务(这篇文章中的 cmets 实际上导致了您找到的帖子):
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/
【讨论】:
我想在这个答案上再表达一件事。如果解决方案不适用于集中式系统,请使用页面方法。【参考方案2】:您可以使用标准的 AJAX 调用来完成此操作。创建一个 .aspx 页面,该页面在其 Page_Load 方法中更新数据库,并将任何所需信息(如更新后的当前 DB 值)显示为 XML。然后使用 jQuery 对该页面进行 AJAX 调用。
您还可以返回一个 HTML 片段(即更新的 GridView),并使用 jQuery 将更新的 HTML 插入当前页面。
编辑: 此页面上的示例 2 应该与您想要的非常接近:http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx
【讨论】:
那么 *** 可能就是这样做的吗?以上是关于如何使用带有 asp.net 的 jQuery 进行 onclientclick 回发的主要内容,如果未能解决你的问题,请参考以下文章
如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应
如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC 控制器?