我试图渲染这样的东西:
<thead ng-init="isDoctor = @(User.IsInRole("Doctor"))">
我希望它是“isDoctor = true | false”(我的服务器端代码呈现此模板返回PartialView),顺便说一下我总是得到如下错误:语法错误:令牌'undefined'不是主表达式at at从[isDoctor = at Error()] 开始的表达式[isDoctor =]的列null。那么,原因是什么?
答案 0 :(得分:7)
尝试这种方式:
<thead ng-init="isDoctor = @(User.IsInRole("Doctor") ? "true" : "false")">
因为C#boolean呈现大写第一个字母:
<thead ng-init="isDoctor = True|False">
True
或False
未定义
答案 1 :(得分:2)
或者,您可以考虑以下事项:
<script type='text/javascript'>
angular.module('my-module')
.value('isDoctor', @(User.IsInRole("Doctor") ? "true" : "false"))
// perhaps other values that need passed in from the server?
.constant('aValue', '@Model.AValue') // for example
;
</script>
这不会将值直接放在像ng-init
那样的范围内;但是,它为您提供了一个可注入的值,您可以在控制器,服务,指令等中使用它,实际上是一个运行时配置变量:
// some script somewhere
angular.module('my-module').controller('myController', [
'$scope',
'isDoctor',
function($scope, isDoctor) {
$scope.isDoctor = isDoctor;
// other controller code here
}]);
关于从Razor到Angular传递数据的这种风格的好处是,如果你忘记这样做,Angular的依赖注入将引发错误,因为实例化myController
需要定义isDoctor
。它将可能是运行时错误的东西移动到一个配置/编译错误中,这个错误应该相对容易纠正。
它还在Razor(cshtml)文件中为您提供了一个位置,您可以将服务器端参数传递到Angular运行时,这样可以减少杂乱,特别是如果您的HTML标记有很多指令和插值。