【发布时间】:2014-01-13 13:08:38
【问题描述】:
我已经用 durandal 引入了 mvc 区域概念
我的层次结构是
Area.Web
Areas
Blog
Controller
SocialController
Social
View
Task
Controller
View
Scripts
App
Blog
ViewModels
我有根据我的网址前往该地区的路线。例如,本地主机/博客
我的路线是:
routes.MapRoute(
name: "blog",
url: "blog/{action}/{id}",
defaults: new { controller = "blog", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Area.Web.Blog.Controllers" }
);
routes.MapRoute(
name: "Task",
url: "Task/{action}/{id}",
defaults: new { controller = "task", action = "Index", id = UrlParameter.Optional},
namespaces: new string[] { "Area.Web.Task.Controllers" }
);
当我尝试导航到 localhost/blog 时,它会调用正确的控制器并正确呈现。当 durandal 路由发生时博客被排除。所以我的路由 url 无法获取控制器。
app.setRoot('viewmodels/social/home', 'entrance');
以下路由抛出 404 异常,因为它忽略了路由 url (localhost/social/home) 中的博客
请告诉我,如何解决此问题。 是否可以在所有路线和 app.set 中包含区域名称。
【问题讨论】:
-
这是否意味着您想在一个 MVC 应用程序中托管多个 Durandal SPA? Durandal 通常有一个入口点 MVC 控制器并将视图存储在 App/views 文件夹中。或者您想使用服务器端渲染页面 (*.cshtml) ?请提供更多信息。
-
你是对的。我试图在单个 mvc 应用程序中托管多个 spa。问题是当我尝试访问 localhost/sitename/Task 之类的应用程序时。它从 url 中排除了站点名称和任务。是否可以始终在 url 中维护这些信息。如果我能够维护这些信息,那就没问题了
-
请问您这种架构背后的原因是什么?为什么不将一个 Durandal 应用程序与子路由器一起使用?
标签: asp.net-mvc-4 asp.net-mvc-routing durandal durandal-navigation