我想重新创建更新面板回发而不使用更新面板来进行回发。这样做的通用方法是什么?
例如,在Stackoverflow上,当您在问题上向上或向下投票时,它会进行回发以更新数据库,我敢打赌他们没有使用更新面板。
我有什么?
我有一个包含表数据的表。当我单击td
项作为整列时,我想对数据库进行更新,并在页面本身上更新gridview。 gridview显示表中所有当前单击的项目,因为它是通过“我们的方法”更新的。
寻找一个很好的通用方法,我可以在没有更新面板的情况下使用很多异步回发。
答案 0 :(得分:17)
Stack Overflow的工作方式与CodeProject文章的两个重要方式不同。
Stack Overflow正在针对ASP.NET MVC控制器操作发出AJAX请求,而不是独立的ASPX页面。您可能会将此视为ASP.NET AJAX页面方法的MVC模拟。在这两种情况下,ASPX方法在性能方面都会落后。
Stack Overflow的AJAX请求返回JSON序列化结果,而不是任意明文或HTML。这使得在客户端处理它更加标准化并且通常更清洁。
例如:当我投票给这个问题时,XmlHttpRequest请求被发送到/ questions / 171000 / vote,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服务,而不是页面方法。页面方法似乎稍微容易编写,但它们也有一些重用缺点,并且往往会提供一种额外的安全性错觉,而实际上并不存在。
这是一个做同样事情的例子,但是有了网络服务(这篇文章的评论实际上导致了你发现的帖子):
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/
答案 1 :(得分:2)
您可以使用标准的AJAX调用来完成此任务。创建一个.aspx页面,该页面在其Page_Load方法中更新数据库,并以XML格式显示任何所需信息(如更新后的当前DB值)。然后使用jQuery对该页面进行AJAX调用。
您还可以返回HTML片段(即更新的GridView),并使用jQuery将更新的HTML插入当前页面。
编辑:
此页面上的示例2应非常接近您的要求:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx
答案 2 :(得分:2)
这link是我发现的最好的事情,并允许我使用javascript和网络方法。