如何在脚本中传递MVC视图会话

时间:2018-04-17 17:00:44

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 asp.net-mvc-5

我有一个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应用程序密钥是用段落标记编写的,但未在脚本部分中定义。

任何人都可以更正实施。

1 个答案:

答案 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