我的一个观点中有以下代码
@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写入页面之间?
由于
答案 0 :(得分:10)
您可以将它们包装在<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和服务器端值,如我的示例所示。
答案 1 :(得分:6)
或者使用@:
@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);
}