3

重複の可能性:
Razor と Javascript コードを混在させる

実行しようとしているコードは次のとおりです。

    // 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;
4

3 に答える 3

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>
于 2012-10-01T23:03:14.830 に答える
1

Razor でタグを開始するとすぐに、マークアップ (を含む) に切り替わります<script>。タグが不要な場合は、<text>代わりに使用してください。

迅速なコピー/貼り付けソリューションが必要な場合は、Tim または Adam の両方を使用してください。ただし、Razor は複数の言語の混合を解析する際にかなり複雑なアルゴリズムを使用するため、クイック リファレンスのPhil HaackRazor 部分全体を提供する価値があります (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 philha@example.com

明示的な表現:

<span>ISBN@(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 ヘルパーが存在するため、Razor デリゲートを除外しました。

于 2012-10-01T23:01:55.717 に答える
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>
于 2012-10-01T23:21:41.373 に答える