AngularJS 路由和 ASP.net MVC
AngularJS Routing and ASP.net MVC
我正在学习 angular,我是第一次尝试使用路由,但出现问题,无法正常工作:
这是我的主要观点(UsingDirectivesWithDataBinding.cshtml):
@{
Layout = null;
}
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<script type="text/javascript" src="~/Scripts/angular-route.js"></script>
<script type="text/javascript" src="~/Scripts/AngularFile.js"></script>
<title>
Using AngularJS Directives and Data Binding
</title>
</head>
<body>
<div data-ng-app="myApp" data-ng-controller="SimpleController">
<a href="#/view1"> View 1</a>
<a href="#/view2"> View 2</a>
<div data-ng-view=""></div>
</div>
</body>
</html>
如您所见,我有两个链接调用此路由:“#/view2”或这个:“#/view1”,但它将我带到家庭控制器的索引页面,而不是停留在同一页面并显示我要显示的部分视图。这是我在家庭控制器中的代码:
public ActionResult UsingDirectivesWithDataBinding()
{
return View();
}
public PartialViewResult View1()
{
return PartialView();
}
public PartialViewResult View2()
{
return PartialView();
}
这是我的 Javascript 文件(AngularFile.js):
var app = angular.module("myApp", ["ngRoute"]);
app.controller("SimpleController", function ($scope) {
$scope.firstName = "John";
$scope.lastname = "Doe";
$scope.customers = [
{ name: "Dave Jones", city: "Phoenix" },
{ name: "Jamie Riley", city: "Atlanta" },
{ name: "Heedy Rowt", city: "Memphis" },
{ name: "Thomas Winter", city: "Seattle" }
];
});
app.config(function ($routeProvider) {
$routeProvider.when("/view1", {
templateUrl: "/Home/View1",
controller: "SimpleController"
})
.when("/view2", {
templateUrl: "/Home/View2",
controller: "SimpleController"
})
.otherwise({redirectTo : "/view1"})
})
为什么不起作用?
Angular 1.6 使用新的 hashPrefix,在你的 hrefs 中尝试将 #/view1 更改为 #!/view1。
我认为您混淆了 server-side(ASP.net) 路由和 client-side(Angular.js) 路由。不确定您是否尝试从 ASP.net 渲染视图并将其提供给 angular 路由器。如果是,那么不幸的是,这将行不通。 Angular 路由器不会调用服务器来获取视图。该视图必须作为模板(HTML 静态文件)在 client-side 上随时可用,并且 angular 将在模板上呈现数据(在从 API 获取后)。
所以基本上这一行 templateUrl: "/Home/View1"
将变成 templateUrl: "/Home/View1.html"
其中 View1.html 是一个静态文件(angular 模板)。
有关详细信息,请查看 > AngularJs routing with Asp.Net Mvc
我正在学习 angular,我是第一次尝试使用路由,但出现问题,无法正常工作:
这是我的主要观点(UsingDirectivesWithDataBinding.cshtml):
@{
Layout = null;
}
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<script type="text/javascript" src="~/Scripts/angular-route.js"></script>
<script type="text/javascript" src="~/Scripts/AngularFile.js"></script>
<title>
Using AngularJS Directives and Data Binding
</title>
</head>
<body>
<div data-ng-app="myApp" data-ng-controller="SimpleController">
<a href="#/view1"> View 1</a>
<a href="#/view2"> View 2</a>
<div data-ng-view=""></div>
</div>
</body>
</html>
如您所见,我有两个链接调用此路由:“#/view2”或这个:“#/view1”,但它将我带到家庭控制器的索引页面,而不是停留在同一页面并显示我要显示的部分视图。这是我在家庭控制器中的代码:
public ActionResult UsingDirectivesWithDataBinding()
{
return View();
}
public PartialViewResult View1()
{
return PartialView();
}
public PartialViewResult View2()
{
return PartialView();
}
这是我的 Javascript 文件(AngularFile.js):
var app = angular.module("myApp", ["ngRoute"]);
app.controller("SimpleController", function ($scope) {
$scope.firstName = "John";
$scope.lastname = "Doe";
$scope.customers = [
{ name: "Dave Jones", city: "Phoenix" },
{ name: "Jamie Riley", city: "Atlanta" },
{ name: "Heedy Rowt", city: "Memphis" },
{ name: "Thomas Winter", city: "Seattle" }
];
});
app.config(function ($routeProvider) {
$routeProvider.when("/view1", {
templateUrl: "/Home/View1",
controller: "SimpleController"
})
.when("/view2", {
templateUrl: "/Home/View2",
controller: "SimpleController"
})
.otherwise({redirectTo : "/view1"})
})
为什么不起作用?
Angular 1.6 使用新的 hashPrefix,在你的 hrefs 中尝试将 #/view1 更改为 #!/view1。
我认为您混淆了 server-side(ASP.net) 路由和 client-side(Angular.js) 路由。不确定您是否尝试从 ASP.net 渲染视图并将其提供给 angular 路由器。如果是,那么不幸的是,这将行不通。 Angular 路由器不会调用服务器来获取视图。该视图必须作为模板(HTML 静态文件)在 client-side 上随时可用,并且 angular 将在模板上呈现数据(在从 API 获取后)。
所以基本上这一行 templateUrl: "/Home/View1"
将变成 templateUrl: "/Home/View1.html"
其中 View1.html 是一个静态文件(angular 模板)。
有关详细信息,请查看 > AngularJs routing with Asp.Net Mvc