asp.net-mvc – 从MVC站点路由到Angular 2应用程序
在我一直寻求以某种方式从传统的MVC网站路由到一个逐页的Angular 2 SPA我最终得出的结论是,最好立即使用Angular 2路由,即没有查询参数转换为有效的Angular 2路由,因为事实证明这是一场彻头彻尾的噩梦.
在我的遗留Web应用程序中,计划是通过重定向到AppController上的相应操作来替换控制器操作代码,例如, public ActionResult Action1(int param1,int param2) { return RedirectTo("Action1","App",new { param1,param2 }); } AppController位于自己的区域(Areas.Web)中,该区域还包含Angular 2应用程序 public class AppController : Controller { public ActionResult Index() { return new FilePathResult("~/Areas/Web/index.html","text/html"); } public ActionResult Action1(int param1,int param2) { return Redirect($"/Areas/Web#/{param1}/{param2}/action1"); } } 在index.html中,我将基本href设置为 <base href="/Areas/Web/"> 所以我的想法是让ASP.NET MVC抓住index.html并将其发送到浏览器,包括应该评估的哈希位置 /<param1>/<param2>/action1 在Angular方面,对吧? 在我的bootstrap代码中,我确保使用了HashLocationStrategy, bootstrap(AppComponent,[provide(LocationStrategy,{ useClass: HashLocationStrategy })]) .then(success => console.log('Bootstrap success')) .catch(error => console.log(error)); app.component.ts的路由如下: @RouteConfig([ { path: '/:param1/:param2/action1,name: 'Action1',component: Action1Component} ]) 我认为这个设置应该正确地路由到Action1Component,但事实并非如此.路由配置完全被忽略,从不调用Action1的构造函数. 我哪里出错了? 编辑:Angular应用程序运行后实际工作的是 http://legacy.com/Areas/Web/<param1>/<param2>/action1 没有# – 但按F5显然会打破这个策略.因此,不仅包含散列符号的URL是无效路由,而且没有散列标记的URL完全有效.我糊涂了…. 解决方法
好的,得到了??这个,这要归功于
this answer.诀窍是,除了引导应用程序之外,永远不要提供ROUTER_PROVIDERS:
import { bootstrap } from 'angular2/platform/browser'; import { provide } from 'angular2/core'; import { HTTP_PROVIDERS } from 'angular2/http'; import { ROUTER_PROVIDERS,LocationStrategy,HashLocationStrategy } from 'angular2/router'; import { AppComponent } from './app.component'; bootstrap(AppComponent,[ ROUTER_PROVIDERS,HTTP_PROVIDERS,provide(LocationStrategy,{ useClass: HashLocationStrategy } )]) .then(success => console.log('Bootstrap success')) .catch(error => console.log(error)); 我的猜测是,与注入组件的任何其他服务一样,如果在组件装饰器的providers部分中声明ROUTER_PROVIDERS,则会获得一个新的Router实例,从而覆盖为HashLocationStrategy配置的实例,并且作为PathLocationStrategy是默认情况下,你就是这样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC 3:如何强制ActionLink执行Htt
- 分享一个很早之前写的小工具DtSpyPlus
- asp.net – 插入未编译
- asp.net-mvc-3 – ASP.Net MVC 3重定向未经授权的用户不登录
- ASP.Net页面刷新后自动滚动到原来位置
- asp.net-mvc-3 – 如何在MVC3中键入时过滤占用
- 如何在ASP.Net MVC中实现ReverseAJAX(Comet)
- asp.net – 你能使用基于属性的WebApi 2与WebForms的路由吗
- asp.net-core-mvc – 无论DataAnnotations属性如何,ModelSt
- 即使在完成所有可能的设置后,使用IIS 7在asp.net 2.0中超时
- asp.net – MvcTextTemplateHost未找到
- 单元测试 – Stubbing或Mocking ASP.NET Web API
- asp.net – 允许服务器/ usercontrol上的任何属性
- 我如何在ASP.Net Web窗体中模拟/伪造会话对象?
- asp.net-mvc – Razor视图:预应用程序启动初始化
- 在asp.net mvc中绑定缺少元素的数组
- entity-framework – Entityframework Mapping问
- asp.net验证文本框 – 至少有一个文本框必须包含
- NPOI 导出 excel 性能测试
- asp.net-mvc-3 – FluentValidation – 验证跨多