2013-12-13 88 views
3

我想呈現像這樣的東西:NG-INIT剃刀表達

<thead ng-init="isDoctor = @(User.IsInRole("Doctor"))"> 

我希望它是「isDoctor =真|假」(我的服務器端代碼呈現此模板返回PartialView)順便說一句,我總是得到一個錯誤,如:語法錯誤:令牌'未定義'不是表達式[isDoctor =]在[isDoctor =在Error()]的列null的主要表達式。那麼,這是什麼原因呢?

回答

6

試試這樣:

<thead ng-init="isDoctor = @(User.IsInRole("Doctor") ? "true" : "false")"> 

因爲C#布爾資本的第一個字母呈現:

<thead ng-init="isDoctor = True|False"> 

TrueFalse未定義

+0

很好,它的工作原理。該死的,大寫的白癡錯誤。謝謝! – starbeast

+0

@starbeast歡迎您)) – karaxuna

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標記有很多指令和插值。

+0

是的,常量或值也是一個選項,除非ng-init沒有問題,但是取自剃刀表達式的'undefined'值。謝謝。 – starbeast

+0

我不推薦遵循建議的方式,因爲您只能在.cshtml中使用Razor語法,而不能在.js中使用。因此,您必須將您的代碼放入視圖中,我認爲這很糟糕。 – hastrb