自动更新ASP.NET中的内容

时间:2012-11-20 11:20:24

标签: jquery asp.net asp.net-mvc asp.net-ajax

我必须设计一个网站,用户可以更新自己的状态,就像Facebook和Twitter以及其他社交网站一样。

现在我的要求是使用新的用户更新刷新Feed。例如:当新状态到来时,facebook会自动将其添加到Feed的顶部。另一方面,twitter显示准备加载的更新数量。 enter image description here

我可以接受这两种方式

现在,我必须决定实现此功能的最佳方法。我愿意使用ASP.NET。所以我很困惑定期中继器控制与计时器和自动刷新或任何其他方式? (我想知道如果我设置转发器进行自动更新,同时如果用户正在对任何状态执行某些操作,它将会丢失)。

或者我是否需要将我的框架从ASP.NET更改为ASP.NET MVC(我对MVC感到害怕,因为我对它的知识非常少,我知道它有一个学习曲线来掌握ajax / Jquery的东西)

有什么建议我怎样才能以更好,更可行的方式实现它?

EDIT1 我不是在寻找代码,但我想要建议来实现这一目标。支持URL将不胜感激。

EDIT2 我对JQuery持开放态度,可以定期检查数据库并填写该部分。但我担心的是,如果用户正在更新任何评论并希望自动生成加载/提要。他的文本框文本不应该消失(就像facebook,twitter或Linkedin)

EDIT3 我已经看到,当任何其他用户修改了问题/答案时,在堆栈溢出时,我收到了通知,例如此问题/答案已修改。当我点击该通知时,只有该部分被重新加载。我很想知道如何实现这个功能。因此,当用户评论状态/帖子时,如果有人更新了内容,则会显示其他用户评论。

Edit4 有人可以向我推荐一个 ASP.NET MVC 3 + 的示例,它可以执行类似的活动(即一个输入框和一个用户插入文本它将在列表中添加项目(使用JQuery)。

9 个答案:

答案 0 :(得分:3)

基础:

ASP.NET Webforms及其RepeaterUpdatePanel控件以及Viewstate概念试图抽象出HTTP协议的无状态特性以及客户端开发(Javascript,HTML)的需要。

对于熟悉桌面应用程序开发的开发人员而言,这听起来不错,但需要付出一些代价

  • 增加网络负载(viewstate)
  • 控制生成的HTML以及客户端和服务器之间交互的有限选项 边码。
  • 杂乱的HTML代码

另一方面,ASP.NET MVC框架遵循更现代的方法来返回简单干净的HTML和javascript。好处是

  • 您可以完全控制生成的HTML代码
  • 您可以按照自己喜欢的方式实现客户端和服务器端之间的交互
  • 使用jQuery等进行简单的客户端开发

缺点是:

  • 你必须熟悉许多技术(HTML,JavaScript,jQuery,MVC模式,MVC框架)。
  • 在开始时,编写HTML的工作比在设计师上拖放一些控件感觉要多得多

在这里,您可以找到很多关于ASP.NET MVC的好教程:http://www.asp.net/mvc

将数据推送到客户端:

您的问题的主要问题是如何在服务器上出现新事件时将数据推送到客户端。

您有两种选择:

  1. 使用一些计时器/ javascript / jQuery代码定期轮询(错误
  2. 使用SignalR之类的长轮询框架(良好
  3. 使用第二个推荐选项后,浏览器会在加载页面后打开与服务器的连接,并等待新数据到达。当服务器有新数据时,它可以通过打开的连接将其发送到所有连接的客户端,客户端可以显示数据或twitter / so等通知。

    SignalR的优点在于,所有连接内容都被抽象出来,您可以定义一些可以从服务器调用的javascript函数。

    这是一个简短的教程列表,重点关注SignalR和ASP.NET MVC:

答案 1 :(得分:2)

  

EDIT1我不是在寻找代码,但我希望得到建议。   支持URL将不胜感激。

我认为ASP.NET MVC是这类问题的首选框架(在.NET Land中),您可以完全控制HTML和客户端代码(JavaScript) - 这对您的情况至关重要 - 这里有一些有助于学习曲线的资源。

http://prodinner.codeplex.com/

http://awesome.codeplex.com/

http://www.noupe.com/tutorial/51-best-of-jquery-tutorials-and-examples.html

和一个很好的教程。

http://www.asp.net/mvc/tutorials/older-versions/javascript/creating-a-mvc-3-application-with-razor-and-unobtrusive-javascript

  

EDIT2我对JQuery持开放态度,可以定期检查数据库和   填写部分。但我担心的是,如果用户正在更新任何   评论和想要加载/提要是自动生成的。他的文本框   文字不应该消失(就像facebook,twitter或Linkedin)

如果你使用Jquery和MVC,你可以完全控制前端,所以如果你有这方面的知识,这可以很容易实现。

诸如stackoverflow和facebook等网站不是使用像asp.net webforms这样的框架构建的,具有用户控件,如转发器和网格视图,它们只是不提供对输出的完全控制并且会妨碍开发(问任何有谁与AJAX和webforms合作,希望实现一些未开箱即用的东西。

因此,使用定制的javascript / jquery根据API调用及其结果来操作html,从而实现部分页面更新。

虽然Web窗体确实提供了Ajax UpdatePanel,但它可能能够为您提供帮助,但是如果您真的想要实现一个灵巧的ajax样式站点,那么请查看上面的链接。

答案 2 :(得分:2)

布拉德威尔逊刚刚在Norvegian开发者大会上就这一主题发表了演讲。这是链接: http://vimeo.com/43603472

至于你的问题,我会建议服务器端的ASP.NET Web Api和客户端的jQuery。您可以使用这些来完成所需的解决方案,但您可以使用SignalR进行实时更新(如果您不使用它,则必须不断轮询服务器)。

答案 3 :(得分:1)

我正在使用网络表单进行编程,但现在我们正在将所有内容更改为MVC。这很有用,但MVC框架更加透明(imo),可以将它与jquery,AJAX和其他一些东西结合起来。所以在你的位置我会使用MVC框架与AJAX并编写我自己的计时器。我以前从不需要这样做,但我会先尝试this example

修改: 我认为这样:1.Render页面有一些隐藏的所有评论(主题或其他)的字段coutned。
2.每5分钟调用带有计数注释参数的AJAX到服务器。
3。计算当前注释并检查当前页面视图中是否有更多或更少的计数器。
4.使用数据返回JSON,例如,如果您有5个新注释并且“counter = 0”,则“counter = 5”如果没有。
5.如果计数器>更新div> 0.
资源:
jquery ajax
MVC with AJAX

答案 4 :(得分:1)

如果接受的受众群体是html5用户,那么您可以使用Server Sent Events。搜索类似的例子。在html5Test.com和其他网站上,您可以看到哪些版本的浏览器支持此功能。

它应该比SignalR更有效,我认为这只是来自服务器的通知,而不是对话。

发现除了internetexplorer之外的所有现代浏览器都支持这一点。

答案 5 :(得分:0)

答案 6 :(得分:0)

您需要创建一个webservice或webmethod,它将返回最新状态。你可以在javascript的setInterval函数中使用jquery ajax来调用它。您可以在该web方法中返回数据或html并将该html或数据放入div中。这样您的页面就不会重新加载,内容也会更新。希望这会对你有所帮助。

答案 7 :(得分:0)

我建议使用UpdatePanel和ScriptManager - 两者都可以在ASP.NET中使用并满足您的要求。

答案 8 :(得分:0)

很久以前,我使用lightstreamer解决了类似的问题。 您可以在许多浏览器中运行此示例:http://www.lightstreamer.com/demo/ChatDemo/ 并看看它是如何工作的。