提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:龚雪|2014-01-21 09:19:02.000|阅读 281 次
概述:创建一个新的ActionResult类,它允许ASP.NET MVC应用作更多更新,HTML DOM不相关的部分,在单一的请求——响应往返中。这样的目的是在客户端呈现更多的局部视图。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
说明:
最近,我们有一个基于网络的项目, 我们当中(开发人员)很少人在处理它。最重要的目标是创建一个复杂的像FaceBook的UI,但我们并不想构建复杂而繁琐的客户端代码。现在的计划是将页面切成许多嵌套的,甚至有时相当小的局部视图,并转移最终HTML片段到客户端。用很简单的JS.ajax功能,做服务器端的大部分工作。
很快,就能看出MVC框架的内置ActionResults并不适合。因此得创建一个自己的解决方案。
解决方案
我们已经创建了一个新的ActionResult类,它允许ASP.NET MVC应用作更多更新,HTML DOM不相关的部分,在单一的请求——响应往返中。这样的目的是在客户端呈现更多的局部视图,因此它被叫做MultipartialResult。
举个例子,你是在处理一个基于Web的邮件读取者,当用户选择一个邮件然后点击删除按钮,会有这么几件事同时发生:
有了MultipartialResult,处理删除点击的动作看起来如下:
public ActionResult OnDelete(long EmailId) { //... does the deleting //... creates the model for the new InboxList partial view (InboxListModel) //... creates the model for the PreviewPane partial view (PreviewPaneModel) //... calculates the number of the emails (EmailCount) //... renders the browser title with the updated unread email number (BrowserTitle) MultipartialResult result = new MultipartialResult(); result.AddView("_InboxList","InboxListDiv",InboxListModel); result.AddView("_PreviewPane","PreviewDiv",PreviewPaneModel); result.AddContent(EmailCount.ToString(),"EmailCountDiv"); result.AddScript(string.Format("document.title='{0}';",BrowserTitle)); return result; }
AddView功能将致使“InboxListDiv”HTML元素被更新。AddContent功能将使“EmailCountDiv”HTML元素内容将被以给出的string更新。
AddScript功能将使给出的JavaScript代码在客户端上被执行。
客户端上的事件处理器(运行无需刷新页面),你需要做的仅仅是调用OnSuccess JavaScript事件中的MultipartialUpdate。
@Ajax.ActionLink("Delete", "OnDelete", new { EmailId = Model.CurrentEmail.Id }, <br />new AjaxOptions { OnSuccess = "MultipartialUpdate" })
或者,你可以在Ajax上用它:
@using (Ajax.BeginForm("OnDelete", new { EmailId = Model.CurrentEmail.Id }, new AjaxOptions { OnSuccess = "MultipartialUpdate" }))
或者你可以在jQuery .post或ajax功能。
function deleteClicked(emailId) { $.ajax({ url: "/inbox/ondelete", type: "POST", data: { emailId: emailId }, success: function (result) { MultipartialUpdate(result); }, });
背景:
MultiPartial的理念很简单。它是继承了JsonReuslt类,呈现指定元素为字符串,收集这些字符串,封包为一个json数据,并发送这个json到客户端。
在客户端,一个小的JavaScript功能遍历这些字符串,并相应更新DOM。
当收集不同类型结果时,MultipartialResult,通过内容正确地标记它们:
public MultipartialResult AddView(string viewName, string containerId, object model = null) { views.Add(new View() { Kind = ViewKind.View, ViewName = viewName, ContainerId = containerId, Model = model }); return this; } public MultipartialResult AddContent(string content, string containerId) { views.Add(new View() { Kind = ViewKind.Content, Content = content, ContainerId = containerId }); return this; } public MultipartialResult AddScript(string script) { views.Add(new View() { Kind = ViewKind.Script, Script = script }); return this; }
在动作返回Result对象后,MVC框架调用ExecuteResult功能,通过挨个处理元素,产生了一个json字符串:
public override void ExecuteResult(ControllerContext context) { List<object> data = new List<object>(); foreach (var view in views) { string html = string.Empty; if (view.Kind == ViewKind.View) { //view result html = RenderPartialViewToString(mController, view.ViewName, view.Model); data.Add(new { updateTargetId = view.ContainerId, html = html }); } else if (view.Kind == ViewKind.Content) { //content result html = view.Content; data.Add(new { updateTargetId = view.ContainerId, html = html }); } else if (view.Kind == ViewKind.Script) { //script result data.Add(new { script = view.Script }); } } Data = data; base.ExecuteResult(context); }
注意渲染局部视图为字符串并非本文的主题。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都控件网通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢