【发布时间】:2015-12-10 23:06:03
【问题描述】:
我正在阅读 this article,但我仍然无法理解 Angular 的 UI 路由器如何与 ASP.Net 路由一起工作。
有人可以简单明了地解释从手动将 URL 输入浏览器的整个生命周期(例如:http://myapp/stateOne)。谁处理请求,ASP.Net?如果不是,如果页面在 ASP 提供服务之前它可以介入,那么角度如何拦截 URL 请求? AngularJS 什么时候与状态提供者一起出现?
我对此很困惑,找不到太多关于这个想法的信息。
除了这个问题,我还有其他一些我无法理解的事情。我正在编写一个应用程序:
- Home/Index.cshtml -> 登陆页面根据状态提供内容(例如:它有一个 ui-view="content",例如,它应该反过来提供 Categories/Index.cshtml)。那么,我该如何设置“默认状态”,以便导航到索引会加载主页和 ng-view 内容,其中包含默认类别?
- Login/Index.cshtml -> 我使用 modal.show() 和 modal.hide() 隐藏和显示的模态表单。从 ui 视图提供。这是有效的。但是,如果用户输入http://myapp/login,我该怎么办?我可以以某种方式拦截请求并显示带有打开模式表单的索引页面吗?甚至更好的是,当前页面只是打开模态表单? (即:是否可以在没有 templateURL 的情况下设置状态)?
- 如果我的页面中有多个列表怎么办?例如,我见过有人将状态设置为 state.childState,但是如果我需要一次加载多个列表(因此,多个状态-> 视图)怎么办?
编辑:
特别注意这部分,如果我理解正确的话,它使用黑魔法使routeTwo/6 加载 index 页面,并在 UI-View 中加载 routeTwo 页面。
HTML5 模式正在工作,但只是以一种非常肤浅的方式。刷新 的页面正在向服务器发送完整的 URL(因为我们已删除 苏格兰威士忌)不知道该怎么办。我们可以通过 正确重新配置 MVC 的 RouteCollection。我们需要明确 关于我们每个视图的路线,然后添加一个包罗万象的 将所有其他 URL 发送到我们的着陆页,由 Angular 处理。
更新 App_Start 中的 RegisterRoutes 方法 => RouteConfig.cs 像这样:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "routeOne",
url: "routesDemo/One",
defaults: new { controller = "RoutesDemo", action = "One" });
routes.MapRoute(
name: "routeTwo",
url: "routesDemo/Two/{donuts}",
defaults: new { controller = "RoutesDemo", action = "Two", donuts = UrlParameter.Optional });
routes.MapRoute(
name: "routeThree",
url: "routesDemo/Three",
defaults: new { controller = "RoutesDemo", action = "Three" });
routes.MapRoute(
name: "login",
url: "Account/Login",
defaults: new { controller = "Account", action = "Login" });
routes.MapRoute(
name: "register",
url: "Account/Register",
defaults: new { controller = "Account", action = "Register" });
routes.MapRoute(
name: "Default",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" });
}
【问题讨论】:
标签: c# asp.net .net angularjs asp.net-mvc