2013-07-26 54 views
2

我有在我的意見如何強制剃刀切換回客戶端代碼?

@if (ViewBag.LoginInfo != null) 
{ 
    var loginToken = "@ViewBag.LoginInfo.Token"; 
    var loginUser = "@ViewBag.LoginInfo.UserNameJs"; 
    var notifyUrl = "@ViewBag.LoginInfo.NotificationUrl"; 
} 

之間{}應呈現的頁面,如JavaScript,代碼但它似乎越來越運行服務器端作爲一個代碼下面的代碼。我知道剃刀切換回客戶端代碼,當它看到HTML在這種情況下代碼是有效的C#和JavaScript。如何在{}之間強制轉換以書面形式作爲javasript?

感謝

+3

您是否嘗試過在一個文本標籤周圍呢? – Slicksim

回答

8

你可以將它們包裝在<text>標籤:

@if (ViewBag.LoginInfo != null) 
{ 
    <text> 
     var loginToken = @Html.Raw(Json.Encode(ViewBag.LoginInfo.Token); 
     var loginUser = @Html.Raw(Json.Encode(ViewBag.LoginInfo.UserNameJs); 
     var notifyUrl = @Html.Raw(Json.Encode(ViewBag.LoginInfo.NotificationUrl); 
    </text> 
} 

還要注意我是如何安全地編碼的值。如果您的令牌包含"字符,則您的示例將產生無效的JavaScript。你不應該混合JavaScript和服務器端值,而不使用如我的示例中所示的安全序列化程序。

4

或者使用@:

@if (ViewBag.LoginInfo != null) 
{ 
    @:var loginToken = @Html.Raw(Json.Encode(ViewBag.LoginInfo.Token); 
    @:var loginUser = @Html.Raw(Json.Encode(ViewBag.LoginInfo.UserNameJs); 
    @:var notifyUrl = @Html.Raw(Json.Encode(ViewBag.LoginInfo.NotificationUrl);  
}