当前位置: 首页 > 编程语言 > C#

asp.netMvc中的渐进式更新模型Share

时间:2023-04-10 14:11:26 C#

Asp.netMvc中的渐进式更新模型我们正在谈论asp.netMVC。我有一个模糊的想法,我应该在每次有新块可用时触发model.Bind()但我不知道如何在a)提供块数据的服务之间建立管道-它正在使用事件模式已实施-每次有新块可用时都会触发事件,但哪个事件?它应该参考模型吗?b)将绑定到模型的数据(我认为它不应该是bind(),而是添加到某个集合中)c)如果在步骤a和b中一切正常,那么更改将传播到视图而无需进一步操作?您可以使用隐藏的iframe和来自服务器的分块传输编码长轮询,当数据可用时它会吐出令牌。在此脚本标记中,您可以调用自定义回调javascript函数,该函数将负责格式化结果。更新:根据评论部分的要求,这里是使用隐藏iframe的长轮询技术的示例实现。假设您有一些模型:publicclassMyViewModel{publicstringFoo{get;放;}}并且您有一个服务,该服务将此模型作为块返回并通过事件通知调用方该块可用:(x=>{try{for(inti=0;i现在,我们可以拥有以下控制器:publicclassHomeController:AsyncController{publicActionResultIndex(){returnView();}publicActionResultLongPoll(){varservice=newMyService();returnnewMyActionResult(service);}}和下面的视图:现在,最后一部分是自定义操作结果的实现,它将分块传输:publicclassMyActionResult:ActionResult{privatereadonlyMyService_service;publicMyActionResult(MyServiceservice){_service=service;}publicoverridevoidExecuteResult(ControllerContextcontext){varresponse=context.HttpContext.Response;response.BufferOutput=true;response.ContentType="text/html";varwait=new手动重置事件(假);_service.GetModels((模型,状态)=>{varhttpResponse=(HttpResponseBase)状态;httpResponse.BufferOutput=true;httpResponse.ContentType="文本/html";varserializer=newJavaScriptSerializer();varscript=string.Format("",serializer.Serialize(model));httpResponse.Write(脚本);httpResponse.Flush();},响应,()=>{wait.Set();});等待.WaitOne();最简单的解决方案是使用轮询,每n秒一次ajax调用来检查是否有新数据可用这种方法的缺点是:延迟、服务器负载。优点:实施起来相当简单。一个更好但更复杂的解决方案是使用长轮询、Web套接字等。如果这个功能值得一试,那么看看Signal-R,一个用于ASP.NET的异步信号库。帮助您构建实时、多用户交互式Web应用程序。将它添加到ASP.NETMVC3Web应用程序非常简单。这里有一个很好的库介绍:AsynchronousScalableWebAppswithReal-TimePersistenceLong-RunningConnectionstoSignalRC#LearningTutorial:ProgressivelyUpdatingModelsinasp.netMVC大家有用,需要多了解C#学习教程.希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: