没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:龚雪|2014-01-21 09:19:02.000|阅读 286 次
概述:创建一个新的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
文章转载自:慧都控件网.NET应用UI框架DevExpress XAF v25.1即将在6月更新,新版本重点增强领域仍然是Blazor,欢迎加入社群及时获取最新信息!
Web测试工具Parasoft SOAtest让测试脚本的创建和复用变得简单高效,自动适应界面变化,实现数据驱动的零压力维护,同时确保跨浏览器测试的无缝执行,极大地降低了维护成本,提高了测试效率。
Parasoft Jtest作为一款强大的Java自动化测试工具,通过灵活的规则定制和统一标准管理,为团队提供了高效的代码规范与合规性检查解决方案。无论是应对行业标准还是企业特殊需求,它都能帮助开发者提升代码质量、降低风险,从而在复杂的开发环境中实现高效协作与稳定交付。
作为全球领先的三维图形开发平台,Tech Soft 3D提供的HOOPS产品套件已成为众多计算机辅助制造(CAM)软件的核心基础架构之一,并为其提供了高性能的数据解析、三维渲染与协作能力。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号