2012-10-01 65 views
1

可能重複:
Mix Razor and Javascript code如何從Razor切換到普通的舊HTML?

這裏是我試圖運行代碼:

// Razor code! 
    @if (User.Identity.IsAuthenticated) { 

     // This is Javascript, NOT C#/Razor code. Hence the '@' symbol. 
     var currentUser = @User.Identity.Name; 

    } else { 

     // Also Javascript code! 
     var currentUser = null; 
    } 

基本上,我想這個輸出,如JavaScript,如果用戶已登入:

var currentUser = @User.Identity.Name; 

或者該用戶是否退出:只要你在剃刀開始標記

var currentUser = null; 
+0

退房的http://計算器。com/questions/5614941/mix-razor-and-javascript-code – zad

回答

2

那麼首先你會想要將它更改爲類似(記得@User.Identity.Name周圍的引號):

<script type="text/javascript"> 
var currentUser = null; 
@if (User.Identity.IsAuthenticated) { 
    <text> 
     currentUser = '@User.Identity.Name'; 
    </text> 
} 
</script> 

然後加入一些javascript:

<script type="text/javascript"> 
if (currentUser != null) { 
    document.getElementById('loggedInUser').innerHTML = 'Welcome '+ currentUser; 
} 
</script> 
+0

它可能需要 ... –

0

,它切換到標記(包括<script>)。如果您不需要任何標籤,請改用<text>

如果您需要快速複製/粘貼解決方案,請將Tim或Adam的工作都做好。然而,隨着刀片採用非常複雜的算法,在分析幾種語言的組合,這是值得提供Phil Haack「的全部小號Razor part of quick reference(通過CC-BY許可允許):

代碼塊:

@{ 
    int x = 123; 
    string y = "because."; 
} 

表達式(HTML編碼):

<span>@model.Message</span> 

表達式(未編碼):

<span> 
@Html.Raw(model.Message) 
</span> 

結合文本和標記:

@foreach(var item in items) { 
    <span>@item.Prop</span> 
} 

混合代碼和明文:

@if (foo) { 
    <text>Plain Text</text> 
} 

混合代碼和純文本(候補):

@if (foo) { 
    @:Plain Text is @bar 
} 

電子郵件地址:

Hi [email protected] 

明確表達:

<span>[email protected](isbnNumber)</span> 

逃脫@符號:

<span>In Razor, you use the 
@@foo to display the value 
of foo</span> 

服務器端點評:

@* 
This is a server side 
multiline comment 
*@ 

調用泛型方法:

@(MyClass.MyMethod<AType>()) 

個混合表達式和文本:

Hello @title. @name. 

我離開了剃刀代表,因爲現在有Razor helpers

+0

這是否回答OP? – kiamlaluno

+0

OP要求在上下文之間切換。我認爲我的答案是合適的。 – nrodic

+0

在該頁面中,沒有提到切換上下文。您應該明確說明OP需要的是切換上下文,以及OP需要什麼。 – kiamlaluno

1
<script> 

    @if(User.Identity.IsAuthenticated) { 
     <text>var currentUser = "@User.Identity.Name";</text> 
    } 
    else { 
     <text>var currentUser = null;</text> 
    } 

    alert(currentUser); 

</script> 

產生一個輸出作者:

var currentUser = "Foo Bar"; 
alert(currentUser); 

@Adam Plocher的答案顯示了一種更清晰的方式來表示它(從服務器腳本中刪除JavaScript變量聲明)。

一個代表它在一個單一的,更清潔的方式稍微容易理解的路線:

<script> 
    var currentUser = '@(User.Identity.IsAuthenticated ? User.Identity.Name : "Anonymous")'; 
    alert(currentUser); 
</script> 
+0

所有的答案都已經過了表決。我不知道這個有什麼問題。 – kiamlaluno

+0

我的第一個版本可能會更好。我相信目前的兩個樣本都回答了這個問題,並且他們都經過了測試。 –

相關問題