我想重新创建更新面板回发,而不使用更新面板进行回发。执行此操作的通用方法是什么?

例如,在 Stackoverflow 上,当您对某个问题投票赞成或反对时,它会回发来更新数据库,我敢打赌他们没有使用更新面板。

我有什么?

我有一个包含表数据的表。当我点击 td item 作为整个列,我想对数据库进行更新,并更新页面本身上的网格视图。网格视图显示表中当前单击的所有项目,因为它是通过“我们的方法”更新的。

寻找一个好的通用方法,我可以在没有更新面板的情况下用于大量异步回发。

有帮助吗?

解决方案

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 服务执行相同操作的示例(这篇文章的评论实际上导致了您找到的文章):

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

其他提示

您可以使用标准的AJAX调用来完成此任务。创建一个.aspx页面,该页面在其Page_Load方法中更新数据库,并以XML格式显示任何所需信息(如更新后的当前DB值)。然后使用jQuery对该页面进行AJAX调用。

您还可以返回HTML片段(即更新的GridView),并使用jQuery将更新的HTML插入当前页面。

编辑: 此页面上的示例2应该非常接近您想要的:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

链接是我发现的最好的事情,并允许我使用javascript和网络方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top