【问题标题】:Angularjs route html5Mode direct url in .net MVCAngularjs在.net MVC中路由html5Mode直接url
【发布时间】:2015-10-15 21:00:24
【问题描述】:

我看到了几个类似的问题/答案,但我似乎仍然遗漏了一些东西。在我刷新页面或直接转到 URL 之前,一切正常。

我可以得到一个 404 或在 mvc 中创建相同的 url,但它只在刷新时提供部分,并且不包括布局页面。

有几个建议将 MVC 路由更改为:

routes.MapRoute(
    name: "Application",
    url: "{*url}",
    defaults: new { controller = "Home", action = "Index" }
);

实施后,这意味着我无法正常访问网站上的任何其他 URL,除非我遗漏了什么,否则基本上所有内容都必须放入 rest api 或为每个 url 编写自定义路由。听起来都不是很好。

那么我怎样才能有一个带有 angularjs 的 html5 url(在有效的浏览器中没有哈希标签)并能够浏览到例如。 Home/About 或 Home,然后单击指向 About 的链接并让它们在相同的基本布局页面中显示相同?

【问题讨论】:

  • 我想这就是你要找的东西stackoverflow.com/questions/25730797/…
  • 这似乎在说同样的事情。重新路由所有请求。不想对所有事情都使用 API 调用似乎比我想象的更具挑战性。正在考虑在 MVC 中编写一个过滤器来重新路由所有非 ajax 请求,但也许有更好的方法。

标签: angularjs asp.net-mvc routing


【解决方案1】:

这可能不是最好的答案,所以如果有人有更好的想法,请发表评论,否则可能会对其他人有所帮助。

我意识到 MVC Ajax 指令没有检测到角度调用,因此我无法自动化该方面。

所以在角度我做了类似的事情

.when('/Home/Contact', {
    templateUrl: '/Home/NgContact'

在我的 MVC 控制器中,我有 2 个操作结果:

public ActionResult NgContact(){
    ViewBag.IsFromNg = 1;
    return Contact();
 }
 public ActionResult Contact() {
    return View("Contact"); //have to type in name, may look for NgContact.cshtml
 }

最后,关于我提出的这些可能称为的任何观点:

@if (ViewBag.IsFromNg == 1){ Layout = null; }

因此,每个 Actionresult 都有 2 个副本,1 个用于整页加载,1 个用于任何调用 angular make,但每个只有 3 行额外的行。

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 2015-06-27
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多