2013-07-26 2 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);  
} 
Смежные вопросы