我有一个mvc控制器,在Controller中处理Session中的所有Azure Api密钥并在视图中传递它。
public ActionResult Index()
{
Session["azureappkey"] = "xxx-xxxx-xxx-xx"; // pass to view
return View();
}
在视图中:
<h2>Index</h2>
<p> @HttpContext.Current.Session["azureappkey"];</p> // got the session value working as expected
@{
var x = HttpContext.Current.Session["azureappkey"]; // not working assign to variable and pass inside the script
<script>
alert(this.x);
alert (x); // GETTING UNDEFINED
</script>
}
Azure应用程序密钥是用段落标记编写的,但未在脚本部分中定义。
任何人都可以更正实施。
答案 0 :(得分:0)
您当前使用的块是Razor块而不是JS块,并且您将会话状态内容分配给C#变量而不是JS变量(请参阅下面的范围):
// Razor block
@{
var x = HttpContext.Current.Session["azureappkey"]; // C# variable
<script>
alert(this.x); // JS variable with "undefined" state
alert (x); // x is also undefined, because it not assigned yet
</script>
}
传递会话状态变量的正确方法是在@Html.Raw
标记内使用<script>
:
<script>
var x = '@Html.Raw(HttpContext.Current.Session["azureappkey"])';
alert(x);
</script>
如果Azure API密钥包含JSON字符串格式,请将Json.Encode
放在@Html.Raw
帮助器中,如Stephen所说:
<script>
var x = @Html.Raw(Json.Encode(HttpContext.Current.Session["azureappkey"]));
alert(x);
</script>
工作示例:https://onlinehelp.tableau.com/current/pro/desktop/en-us/connect_basic_replace.html