Asp.net mvc 4 如何强制razor切换回客户端代码?

Asp.net mvc 4 如何强制razor切换回客户端代码?,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我的一个视图中有以下代码 @if (ViewBag.LoginInfo != null) { var loginToken = "@ViewBag.LoginInfo.Token"; var loginUser = "@ViewBag.LoginInfo.UserNameJs"; var notifyUrl = "@ViewBag.LoginInfo.NotificationUrl"; } {}之间的代码应该以javascript的形式呈现给页面,但是它似乎是作为服务器

我的一个视图中有以下代码

@if (ViewBag.LoginInfo != null)
{
    var loginToken = "@ViewBag.LoginInfo.Token";
    var loginUser = "@ViewBag.LoginInfo.UserNameJs";
    var notifyUrl = "@ViewBag.LoginInfo.NotificationUrl";
}
{}之间的代码应该以javascript的形式呈现给页面,但是它似乎是作为服务器端代码运行的。我知道razor在看到html时会切换回客户端代码。在本例中,代码是有效的C#和javascript。如何强制将{}之间的所有内容作为javasript写入页面


谢谢

您可以将它们包装在
标签中:

@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>
}
@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);
}

还请注意我是如何安全地对值进行编码的。例如,如果您的令牌包含
字符,您的示例将生成无效的javascript。如果不使用我的示例中所示的安全序列化程序,您决不能将javascript和服务器端值混合使用。

或者使用
@

@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);     
}

你有没有试过用文字标签把它围起来?