ASP.NET MVC中的AngularJS $ routeProvider和相对URL

时间:2013-02-21 02:10:39

标签: asp.net-mvc angularjs hashbang

我是AngularJS的新手。只想用$ routeProvider试用相对的URL。

以下是该方案:

我有一个“编辑”页面,该页面的ASP.NET MVC链接将是:

http://localhost/Workflow/Edit

因此ASP.NET MVC Controller是“WorkflowController”,动作是“编辑”。对于Partials,我有Controller操作,每个都返回一个像这样的部分视图:

    public ActionResult WorkflowTransition()
    {
        return PartialView("WorkflowTransition");
    }

    public ActionResult WorkflowTransitionApprovers()
    {
        return PartialView("WorkflowTransitionApprovers");
    }

以下是AngularJS模块配置 - 注意:为每条路线调用PartialView(如上所述)(这可能不正确):

    $routeProvider.when('Workflow/WorkflowTransition', {
        templateUrl: '/Workflow/WorkflowTransition',
        controller: 'transitionCtrl',
    });
    $routeProvider.when('Workflow/WorkflowTransitionApprovers', {
        templateUrl: '/Workflow/WorkflowTransitionApprovers',
        controller: 'approversCtrl'

    $routeProvider.otherwise({
        redirectTo: '/'
    });

注意:我有指定以下任一项:

  

$ locationProvider.html5Mode(假);

OR

  

$ locationProvider.html5Mode(假).hashPrefix( '!');

href链接的指定方式如下:

<a href="#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>

这会生成以下形式的链接:

http://localhost/Workflow/Edit#/Workflow/WorkflowTransition

这显然是错误的(点击链接没有做任何事情可能因为浏览器试图导航到哈希),所以我尝试了领先的'/',但也没有运气:

<a href="/#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>

如果我直接导​​航部分即http://localhost/Workflow/WorkflowTransition,浏览器会将html呈现为原样(以及angularjs花括号{{}})。

我的问题是:AngularJS如何对待'#'或'#!'在确定相对URL时?对于例如这条路线(假设我从锚标记中的URL中删除/编辑部分):

$routeProvider.when('Workflow/WorkflowTransition',匹配网址:

http://localhost/Workflow/#WorkflowTransition

是否从URL中删除了'#',然后根据$ routeProvider.when()中的URL模式进行检查?

有人可以建议相关网址的正确路线吗?

2 个答案:

答案 0 :(得分:3)

根据我的观察,匹配路线时必须删除散列。我有像

这样的链接
<a href="#Objects">

生成网址

http://localhost:55033/#/Objects

我的路线设置

$routeProvider.when("/Objects", {
    templateUrl: "objects.html",
    controller: ObjectCtrl
});

这可以按预期工作,拉出正确的部分。请注意,在这种情况下,我不是通过ASP.NET MVC控制器渲染部分内容。相反,我将objects.html作为普通的html文件放在一边,我在href中使用哈希,因此ASP.NET MVC路由不会启动。

答案 1 :(得分:1)

Routeprovide应设置如下。

$routeProvider.when('/Workflow/WorkflowTransition', {
    templateUrl: "WorkflowTransition.html",
    controller: WorkflowTransitionCtrl
});

和URL应输入以下格式。

http://localhost/#/Workflow/WorkflowTransition ?