我在网上试了很多其他帖子似乎与我的问题一样,但都没有用。
我有这个菜单:
<ul class="nav navbar-nav">
<li class="active"><a href="#Painel/1">Novas</a></li>
<li><a href="#Painel/2">Todas</a></li>
<li><a href="#Painel/3">Finalizadas</a></li>
<li><a href="#Painel/4">Pendentes</a></li>
</ul>
非常简单的导航栏。此路由设置:
module.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider)
{
//$locationProvider.html5Mode(true);
$routeProvider
.when('/Painel/:painelId/',
{
templateUrl : function(params)
{
return "/Painel/Index/" + params.painelId;
},
controller : 'painelController'
})
.otherwise(
{
redirectTo: "/Painel"
});
}]);
}
我的MVC控制器:
public class PainelController : Controller
{
public ActionResult Index(int? id))
{
return View();
}
}
最后我的角度控制器:
module.controller('painelController', ["$scope", "$routeParams", function ($scope, $routeParams)
{
debugger;
}]);
它是一个非常简单的架构,但是角度无限地循环通过它的控制器。我小心翼翼地将templateUrl
亲戚与/
设置为那里建议的帖子,但是没有用。它可以将参数发送到mvc Action,但是它会在angular的控制器debugger
上开始循环停止。
我该怎么办?
答案 0 :(得分:1)
你的问题是:painelId不是可选的,因此你无限地落入你的otherwise()重定向。使:painelId可选,如
'/Painel/:painelId?/'
这应该可以解决您的问题。如果您没有使用支持可选参数的Angular版本,那么您需要添加另一个when()来覆盖&#39; / Painel&#39;路由。
答案 1 :(得分:0)
主要问题不在于Angular代码,而是在MVC的返回操作中:
return View();
由于您正在处理动态内容,因此您不必返回完整的html源代码(包含html
,head
,body
代码... ),所以我不得不改为:
return PartialView();
更有意义的是什么。因为每个请求都在调用一个新的角度代码,这会打开一个新的请求等等......然后我为opitional参数创建了两条路径(我不知道为什么它没有像@ Tacoman667一样工作尖)