MVC使用AngularJS局部视图的问题

Eason0807 2017-05-25 07:25:11
在MVC的 cshtml文件中怎么引入定义成html文件的AngularJS局部视图??

直接写
<ng-include src="'/Views/Shared/ProductList.html'"></ng-include>
页面加载不到

而如果用
@Html.Action
方法会自动添加html标签;
...全文
431 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eason0807 2017-06-06
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
纯粹前端的 web 应用,性能跟 windows 桌面的程序相当,甚至更快。因为现在的 js 引擎的 JIT 编译机制非常强大,浏览器的渲染效率也极高。 只不过 web 应用方式自动从服务器端部署模板文件、js文件、css 文件等的时候,可能会有零点几秒(例如50毫秒)的延迟。然后就快如闪电。一旦你发现 web 应用的体验跟过去几年的一样,那么可以断定就是跟什么 asp.net 扯到一起了。 只要真正懂得 web 应用前端编程,加上 websocket 通讯,正确的响应式 mvvm 编程方式,那么用户体验超快超爽,通常对于企业级复杂界面应用比 winform 的程序界面还要更流程还要更快。
这几天学习了一下angula4,基本搞明白了!!多谢!!
  • 打赏
  • 举报
回复
纯粹前端的 web 应用,性能跟 windows 桌面的程序相当,甚至更快。因为现在的 js 引擎的 JIT 编译机制非常强大,浏览器的渲染效率也极高。 只不过 web 应用方式自动从服务器端部署模板文件、js文件、css 文件等的时候,可能会有零点几秒(例如50毫秒)的延迟。然后就快如闪电。一旦你发现 web 应用的体验跟过去几年的一样,那么可以断定就是跟什么 asp.net 扯到一起了。 只要真正懂得 web 应用前端编程,加上 websocket 通讯,正确的响应式 mvvm 编程方式,那么用户体验超快超爽,通常对于企业级复杂界面应用比 winform 的程序界面还要更流程还要更快。
楠小南 2017-05-28
  • 打赏
  • 举报
回复
引用 12 楼 weixin_38641834 的回复:
[quote=引用 11 楼 hanjun0612 的回复:] view下放的是视图。cshtml。 你的Html应该放在自己的文件夹。 不然走了路由,就要访问action。但是你并没有对应的action。 mvc先走controller在找到action,最后返回对应view。
我其实就是这里没想明白,不走MVC路由?完全用angular的路由?[/quote] 怎么又扯到路由了 比如 mvc 的路由 是http://xx.com/a/b 这样的 angular 的 路由是 http://xx.com/a/b#
引用 12 楼 weixin_38641834 的回复:
[quote=引用 11 楼 hanjun0612 的回复:] view下放的是视图。cshtml。 你的Html应该放在自己的文件夹。 不然走了路由,就要访问action。但是你并没有对应的action。 mvc先走controller在找到action,最后返回对应view。
我其实就是这里没想明白,不走MVC路由?完全用angular的路由?[/quote] 因为你如果把模板放进mvc的视图文件夹。mvc 就会认为这东西归我管,我要去解析他。最后发现没有对应的控制器 所以返回404 你另外建一个模板文件夹就不一样了。东西不归mvc 管 大概是这个道理
  • 打赏
  • 举报
回复
引用 10 楼 weixin_38641834 的回复:
我现在就是没弄明白,当服务端是ASP.NET WebApi的时候,angular是怎么把它的视图模板从服务端get过来的 所以我才问是不是路径写成api/controller/action这种ASP.NET WebApi的路由
你看来是没有web 服务器概念,只知道 webapi这个高达上的东西! 比如说你在一个从未安装过 asp.net 的 IIS 环境里,部署过网站吗?你学习过使用 html/css/javascript 开发网页的技术吗?那时候你就会学到如何下载 web 服务器上的文件到浏览器端了。 而有了 asp.net 反而让你变得混乱了。
  • 打赏
  • 举报
回复
引用 12 楼 weixin_38641834 的回复:
我其实就是这里没想明白,不走MVC路由?完全用angular的路由?
晕!你还是不明白? 你的前端自己的文本文件,直接get下来就行了,跟服务器端有什么 asp.net、jsp、php毫无关系,不要一门心思跟asp.net 发生纠缠(除非你想用这个概念炒作点什么)。
Eason0807 2017-05-28
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
view下放的是视图。cshtml。 你的Html应该放在自己的文件夹。 不然走了路由,就要访问action。但是你并没有对应的action。 mvc先走controller在找到action,最后返回对应view。
我其实就是这里没想明白,不走MVC路由?完全用angular的路由?
正怒月神 版主 2017-05-27
  • 打赏
  • 举报
回复
view下放的是视图。cshtml。
你的Html应该放在自己的文件夹。
不然走了路由,就要访问action。但是你并没有对应的action。
mvc先走controller在找到action,最后返回对应view。

Eason0807 2017-05-26
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
#2 楼的意思是说 angularjs 的View是前端自己的View,不要走 asp.net mvc 那个路子。
可能是我问题表述的不清楚,我就是要那种效果的 ASP.NET MVC只有2个视图,一个登录页面,一个主页 其他的内容都是通过angular控制器渲染的; 我现在就是没弄明白,当服务端是ASP.NET WebApi的时候,angular是怎么把它的视图模板从服务端get过来的 所以我才问是不是路径写成api/controller/action这种ASP.NET WebApi的路由
  • 打赏
  • 举报
回复
#2 楼的意思是说 angularjs 的View是前端自己的View,不要走 asp.net mvc 那个路子。
Eason0807 2017-05-26
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
比如说要使用 bankdateindex 模板,大致可以这样做
    function LoadDom(id, url, callback) {
        var obj = jQuery("#" + id);
        if (obj.length > 0)
            callback();
        else
            jQuery.get(url, function (r) {
                jQuery("body").append(r);
                callback();
            });
    }
   
    LoadDom("bankdateindex", function()
    {
        这里可以放心地使用 bankdateindex  模板了。
    }
实际上对于响应式系统,假设 bankdateindex 模板并不存在,那么会自动先调用 loading 模板,然后等 bankdateindex 模板加载完毕之后才放心地使用 bankdateindex 模板,这些都封装为一个2、30行的 js 代码中。
我是明白你的意思了,刚学前端对jQuery不是太熟悉,angular应该也是可以使用类似的方法; 我的主要目的是做一个单页面的应用,页面会有许多tab,如果一次性加载有点慢。我就想做成视图模板,然后用angular异步加载,白天又看了些资料,理解2楼说的意思了,我得先弄一个模板缓存,缓存从服务端读取,然后控制器再从缓存里取,不知道是不是这个意思?
  • 打赏
  • 举报
回复
比如说要使用 bankdateindex 模板,大致可以这样做
    function LoadDom(id, url, callback) {
        var obj = jQuery("#" + id);
        if (obj.length > 0)
            callback();
        else
            jQuery.get(url, function (r) {
                jQuery("body").append(r);
                callback();
            });
    }
   
    LoadDom("bankdateindex", function()
    {
        这里可以放心地使用 bankdateindex  模板了。
    }
实际上对于响应式系统,假设 bankdateindex 模板并不存在,那么会自动先调用 loading 模板,然后等 bankdateindex 模板加载完毕之后才放心地使用 bankdateindex 模板,这些都封装为一个2、30行的 js 代码中。
  • 打赏
  • 举报
回复
学 asp.net 真的是学得有点“呆”啦,什么都往 asp.net 动态语言上套。如果你就是要一个文件,你又不需要服务器端跑什么程序,你让它 asp.net 执行个半句话都是会觉得是对自己的前端应用莫大的资源浪费。
  • 打赏
  • 举报
回复
在 web 服务器上的一个文本文件通过(比如说)jQuery.get("templates/abc.html", 回调函数) 就能下来了,怎么会跑到什么 json、api 那种复杂的东西上去?
Eason0807 2017-05-26
  • 打赏
  • 举报
回复
理解错了,服务端返回个string就可以吧?
Eason0807 2017-05-26
  • 打赏
  • 举报
回复
也就是说在服务端,将模板的html文件弄成json通过api给到angular? 然后angular的tempalteUrl用/api/controller/action,这样写吗?
threenewbee 2017-05-25
  • 打赏
  • 举报
回复
mvc提供json,angularjs的视图和mvc的无关
楠小南 2017-05-25
  • 打赏
  • 举报
回复
angular 用指令 把模板get 出来 以下是模板缓存,放在你的视图里面 <script type="text/ng-template" id=“bankdateindex"> <div>这里放你的模板代码</div> </script> <div data-recharge=""></div> angular 的指令 .directive("recharge", [function () { return { restrict: "A", replace: true, templateUrl: "bankdateindex" }; }])
编辑推荐 《精通AngularJS》指出AngularJS诞生于Google,已用于开发多款Google产品。它是一套JavaScript前端框架,用于开发当下流行的数据驱动的单页面Web应用。其核心特性是:MVC、模块化、自动双向数据绑定、语义化标签、依赖注入等。 作者简介 Pawel Kozlowski有15年以上的Web开发经验,接触过多种Web技术、语言和平台。他精通客户端和服务器端编程,并始终在寻找能提高生产率的工具和流程。Pawel是自由和开源软件的坚定支持者,他在AngularJS 社区非常活跃,为AngularJS项目贡献了大量的代码。他也对Angular UI (AngularJS的配套框架)有所贡献,并为AngularJS 提供了Twitter Bootstrap 相关的指令(directives)。不写代码时,Pawel 常在会议与活动上为AngularJS布道。 Peter Bacon Darwin已经积累了20年以上的编程经验,他在.NET发布之前,就已经用它工作了。他还对IronRuby的开发有所贡献。他曾在Avanade和IMGROUP做IT顾问。退休后,自由开发和照顾孩子占用了他大部分的时光。Peter是AngularJS社区的名人。他最近加入了Google的AngularJS团队。他还是Angular UI项目的创始成员。他曾在Devoxx UK和其他活动中发表过有关AngularJS的演讲,并开办过AngularJS的培训课程。他希望帮助企业更好地利用AngularJS。 目录 序1 第1章Angular之禅7 11邂逅AngularJS7 熟悉框架8 参与AngularJS项目8 社区8 在线学习资源9 库和扩展9 工具9 Batarang10 Plunker与jsFiddle10 IDE扩展和插件10 12AngularJS速成10 HelloWorld——AngularJS示例10 双向数据绑定12 AngularJS中的MVC模式12 鸟瞰13 深入作用域15 视图21 模块与依赖注入26 模块26 协作对象27 注册服务29 模块的生命周期33 模块依赖35 13AngularJS和其他框架38 jQuery与AngularJS39 苹果与橙子40 窥视未来41 14总结41 第2章构建与测试43 21介绍示例应用44 熟悉问题领域44 技术栈45 持久化存储46 MongoLab46 服务器端环境47 第三方JavaScript库48 BootstrapCSS48 22构建系统48 构建系统准则49 自动化所有事情49 尽早报错,清晰报错49 不同的工作流,不同的命令50 构建脚本同样是代码50 工具50 Gruntjs51 测试库与工具51 Jasmine51 Karmarunner52 23组织文件和目录52 根目录52 进入源代码目录54 AngularJS的特定文件54 轻装上路56 深入测试目录57 文件命名约定57 24AngularJS模块和文件57 一个文件,一个模块58 模块内部59 注册provider的不同语法59 声明配置和运行块的语法61 25自动化测试62 单元测试63 剖析Jasmine测试64 测试AngularJS对象65 测试服务65 测试控制器67 Mock对象和异步代码测试68 端对端测试70 日常工作流71 Karmarunner的提示与技巧72 执行测试子集73 调试73 26小结74 第3章与后端服务器通信75 31使用$http进行XHR和JSONP请求75 熟悉数据模型和MongoLabURLs76 $httpAPI快速导览76 配置对象说明77 转换请求数据78 处理HTTP响应79 转换响应数据79 处理同源政策约束79 利用JSONP克服同源政策约束80 JSONP的限制81 利用CORS克服同源政策约束81 服务器端代理83 32promiseAPI与$q84 工作中的promise和$q服务85 学习$q服务的基础知识85 promise是第一类JavaScript对象87 聚合回调88 注册回调和承诺的生命周期88 异步动作的链式调用89 关于$q的其他91 AngularJS中的$q集成93 33promiseAPI与$http94 34与RESTful端点通信95 $resource服务95 构造级与实例级方法97 $resource创建异步方法100 $resource服务的限制101 使用$http自定
# 单页面和多页面开发及应用 # 单页面: - 什么是单页面:单页面是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入。 - 跳转仅加载一次,用于PC和公务网站 - 页眉 -> 第一页,第二页, 第三页 -> 脚本 # 单页面技术: -AngularJS是一个全面的客户端侧框架。其模板基于双向UI数据绑定。数据绑定是一种自动方法,在模型改变时更新视图,以及在视图改变时更新模型。其HTML模板在浏览器中编译。编译步骤创建纯HTML,浏览器将其重新渲染到实时视图。该步骤会在随后的页面浏览中重复。在传统的服务器端HTML编程中,控制器和模型等概念在服务器进程中进行交互以产生新的HTML视图。在AngularJS框架中,控制器和模型状态在客户端的浏览器中维护,从而使生成新页面不依赖与服务器的交互。 -Ember.js是基于模型-视图-控制器(MVC)软件架构模型的客户端侧JavaScript Web应用程序框架。它允许开发人员在一个框架中通过常用的习惯用语和最佳实践来创建可伸缩的单页面应用程序。该框架提供丰富的对象模型、声明性双向数据绑定、计算属性,Handlebars.js提供的自动更新模板,以及一个路由器管理应用程序状态。 -Meteor.js是一个专门为单页应用设计的全栈(客户端-服务器)JavaScript框架。它具有比Angular、Ember或ReactJS更简单的数据绑定特性且使用--Distributed Data Protocol和一个发布/订阅来自动将数据更改传播到客户端,无需开发人员编写任何同步代码。全栈反应确保从数据库到模板的所有层都可以在必要时自动更新。诸如服务器端渲染等生态系统包则解决搜索引擎优化(SEO)等问题。 -Aurelia是一个适用于移动设备、桌面和网页的JavaScript客户端框架。它类似AngularJS,但更新、更符合标准,并采用模块化举措。Aurelia使用下一代ECMAScript编写。 -Vue.js(通常称为Vue)是一个用于构建用户界面的开源渐进式JavaScript框架。 -React(通常写为React.js或ReactJS)是一个构建用户界面的JavaScript函式庫。它由Facebook、Instagram和个人开发者以及企业社区维护。React最大的优势是易于使用——基本上任何熟悉HTML的开发人员都可以创建React应用程序。另一个所称的优势是可能使用相同的技术堆栈来同时创建Web与移动应用程序。有多家公司使用React和Redux库来让开发人员创建复杂但可扩展的Web应用程序。 -Fulcro是一个全栈库,它采用Netflix的Falcor,Facebook的Relay和Om Next对反应性,功能性,数据驱动软件进行改编的数据驱动原则。 -单页面做seo(搜索引擎优化): -根据部分进行优化为每个关键字创建一个
或每个关键字并为其分配一个适当的ID,该页面上的内部链接将链接至ID。 -优化页面速度对于单页网站SEO来说至关重要。 - 做了seo 以后,单页面还是单页面 # 单页面优点: -减小服务器压力。 如果不用单页面(spa),如果每次切换页面的时候,都向服务器发送一个请求,服务器返回一个html文件;但是如果使用了单页面,在切换时,不需要请求服务器,只要通过本地的js来切换即可。并且服务器端就不需要配置路由,完全做到了前后端分离 -增强用户体验,增加app的使用流畅性。 使用spa之后,页面在切换的时候非常流畅,完全没有那种不断刷新的感觉,而是非常快的就有了响应,因为js运行速度很快,所以js在做本地路由的时候,就会非常快。 -单页应用没有页面之间的切换,就不会出现“白屏现象”,也不会出现假死并有“闪烁”现象。 -单页应用相对服务器压力小,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍。 -良好的前后端分离。后端不再负责模板渲染、输出页面工作,后端API通用化,即同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端。 -单页面缺点: -首次加载耗时比较多。 解决办法:可以采用基于HTTP Chunk 的首屏数据渐进式预加载方案,该方案总体减少了单页应用1.2s的首屏呈现时间。首屏数据渐进式预加载的优化思路也得到了体现: 优化首屏数据加载节点的速度。 预先加载首屏数据,使得多个串行节点并行化。 -SEO问题,不利于百度,360等搜索引擎收录。 解决办法:可以采用prerender服务,它拿到请求够,直接在服务端的一个js engine里,运行这个HTML(就像浏览器做的那样),直到内容动态填完之后,再广播一个事件告诉phantomjs“内容已经好了,可以返回给爬虫了”,这样爬虫就拿到了一份完整的HTML,就和在浏览器里渲染完的一样。目前流行的框架都有对应的服务器渲染框架 -如有造成Css命名冲突。 解决办法:我们可以使用Sass、LESS和Stylus等CSS预处理器,在一定程度上可以解决该问题。 -前进、后退、地址栏、书签等,都需要程序进行管理,页面的复杂度很高,需要一定的技能水平和开发成本高。 # 多页面: -什么是多页面:每一次页面跳转的时候,后台服务器都会给返回一个新的html文档,这种类型的网站也就是多页网站,也叫做多页应用 - 跳转需要刷新所有资源,用于app 或 客户端 - 页眉 -> 第一页 -> 脚本,页眉 -> 第二页 -> 脚本,页眉 -> 第三页 -> 脚本 -多页面优点:给用户提供一个完美的视觉方向,重点是没有很多的菜单,简洁明了的SEO管理。由于可以针对每页一个关键字优化应用程序 -多页面缺点:后端和移动客户端不能同时使用,前端和后端开发紧密结合。开发变得相当复杂。开发人员需要为客户端和服务器端使用框架。这导致应用程序开发时间更长。 # 区别: -组成:单页面由一个外壳页面和多个页面组成, 多页面由多个完整页面组成 -css(资源公用):单页面为共用,只需要外壳部分加载,多页面则不共用,每个页面单独加载 -刷新方式:单页面页面局部更改或刷新,多页面整页刷新 -url模式:单页面 a.com/#/pageone 多页面 a.com/pageone.html -用户体验:单页面页面切换快,用户体验良好,多页面加载缓慢,流畅度不够,用户体验较差 -转场动画:单页面容易实现,多页面无法实现 -数据传递:单页面容易,多页面需要依赖url传参,或cookie,localSrorage等 -搜索引擎优化:单页面需要单独方案,实现较为困难,不利于SEO搜索,可利用与SSR优化,多页面实现方法容易 -适用范围:单页面高要求的体验度,追求页面的流畅,多页面追求高度支持搜索引擎的应用 -开发成本:单页面较高,需要专业的框架,多页面较低,但页面重复代码较多 -维护成本:单页面相对容易,双页面相对复杂

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧