我已经用durandal
介绍了mvc区域概念我的层次结构将是
Area.Web
Areas
Blog
Controller
SocialController
Social
View
Task
Controller
View
Scripts
App
Blog
ViewModels
我根据我的网址指向该区域。例如,localhost / blog
我的路线是:
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中包含区域名称。
答案 0 :(得分:1)
首先恕我直言你应该重新考虑你的项目架构。例如,如果您需要使用Weyland优化此应用程序,则两个SPA将最终位于同一文件中,而不会为您提供所需的分离。
但是,您可以创建单独的文件夹,并为每个SPA提供自己的main.js文件,而不是将它们都放在app文件夹下。
在这种情况下,您将拥有以下项目结构:
Area.Web
AppBlog
Services
Views
ViewModels
main.js
AppTask
Services
Views
ViewModels
main.js
Areas
Blog
Controller
View
Task
Controller
View
Scripts
durandal
etc.
Content
etc.
您在Blog区域中的视图将使用以下JS导入:
<script src="~/Scripts/require.js" data-main="@Url.Content("~/AppBlog/main")"></script>
而任务区将使用
<script src="~/Scripts/require.js" data-main="@Url.Content("~/AppBlog/main")"></script>
在此类设置中,您的路线看起来与您的代码中的路线完全相同
修改强>
routes.MapRoute(
name: "blog",
url: "blog/{action}/{id}",
defaults: new { controller = "home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Area.Web.Blog.Controllers" }
);
routes.MapRoute(
name: "Task",
url: "Task/{action}/{id}",
defaults: new { controller = "home", action = "Index", id = UrlParameter.Optional},
namespaces: new string[] { "Area.Web.Task.Controllers" }
);