没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:龚雪|2014-01-21 09:19:02.000|阅读 285 次
概述:创建一个新的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@evget.com
文章转载自:慧都控件网Parasoft dotTEST凭借其即插即用的内置安全标准和直观的规则映射能力,为C#/VB.NET 开发者提供了强大的支持。它有效消除了理解复杂标准与配置规则的障碍,让开发者能够专注于编写高质量代码,而非耗费精力在标准解读与工具映射上。这不仅显著提升了开发效率,缩短了交付周期,更从源头系统性地降低了安全风险,确保了软件符合严苛的行业合规要求。
Parasoft Virtualize以智能复用和轻量存储为核心,不仅解决了传统测试数据管理的冗余与性能瓶颈,更通过技术创新释放了团队的生产力。它让开发者摆脱重复劳动的束缚,将精力聚焦于更复杂的业务逻辑与质量验证,从而在快节奏的开发周期中保持敏捷与精准。无论是应对高并发的性能挑战,还是满足数据合规的严苛要求,Virtualize都以优秀的解决方案为技术团队提供了坚实的支撑。
imScale近期与 西门子PLM软件公司 和Tech Soft 3D达成技术合作,将行业领先的几何建模内核Parasolid及多格式CAD数据解析引擎HOOPS Exchange深度集成至平台中,全面增强CAD数据处理与互操作能力。
今天为大家介绍Kotlin 开发者如何在 Android Studio 中使用 JetBrains AI Assistant ,欢迎下载工具体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号