如何使用带有 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服务来获取响应

如何在带有母版页的 ASP.NET 中使用 JCrop

如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC 控制器?

ASP.NET MVC 在 jQuery 数据表中使用带有按钮 onclick 的模态弹出窗口

带有 ASP.NET 问题的 Jquery 自动完成

使用带有 jquery ajax 的 ASP.NET MVC 验证?