这是一个相当简单的问题,我使用的是AngularJS v1.7.2和C MVC。
我有了标准的布局页面和视图设置。
我从外部脚本文件加载AngularJS控制器/服务,所以视图上没有任何内容。
我的问题是,我想将一个值从viewbag赋给一个控制器变量,但显然我不能在脚本中引用viewbag,因为它需要在cshtml页面上完成。
我试过在Ng Init里面这样做
<div ng-init="City = @ViewBag.City"></div>
或
<div style="visibility: hidden;">{{CityId = '1'}}</div>
我试过变种
{{City = @ViewBag.City}}
,
'@ViewBag.City'
我在StackOverflow上看到的其他两个都没有用。
我在视图上加载脚本时使用:
@section Page_Scripts {
@Scripts.Render("~/angular/ngListing")
}
这显然是在布局中加载的。我的控制器工作正常,所以这不是问题。
我的控制器在初始化时进行Ajax调用,此时我需要
$scope.City
要用正确的值填充,但它始终设置为0。
以下是我的控制器+服务(为了这样组合)的样子:
_mainApp.controller("ListingCtrl", function ($scope, $http) {
$scope.City = 0;
$scope.Attractions = [];
$scope.Offset = 0;
$scope.Pages = new Array(10);
var MakeRequest = function (offset) {
$http.post("/City/GetStuff?City=" + $scope.City + "&Offset=" + offset).then(function (resp) {
$scope.Attractions = resp.data;
});
}
MakeRequest($scope.Offset);
$scope.PageUp = function () {
$scope.Offset++;
MakeRequest($scope.Offset);
}
$scope.PageDown = function () {
$scope.Offset--;
MakeRequest($scope.Offset);
}
$scope.GoTo = function (offset) {
$scope.Offset = offset;
MakeRequest(offset);
}
});
任何非黑客的解决方案都会受到赞赏。它可以包含指令或将值赋给$scope.city但内联的方法,或者至少获取
ViewBag.City
以某种方式传递给控制器的值。