4

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

@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 写入页面?

谢谢

4

2 回答 2

11

您可以将它们包装在<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 和服务器端值。

于 2013-07-26T14:39:03.733 回答
11

或者使用@:

@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);     
}
于 2015-05-07T10:41:49.183 回答