在Razor调用我的HTML Helper之前调用Javascript函数

时间:2015-03-31 16:45:04

标签: javascript c# jquery asp.net-mvc-4 razor

我一直在研究HTML帮助程序,它会隐藏或显示菜单项,具体取决于您的用户类型。

出于这个原因,在我的一个控制器中,我正在设置一个会话变量,其值为“ADMIN”

context.Session["perfil"] = "ADMIN"

我面临的问题是在调用控制器设置会话变量的Javascript函数之前调用Helper函数

这就是我调用HtmlHelper(通过Razor)的方式

 @using XSiteManagerWeb.Helpers
 @Html.Raw(Html.MiMenu("../Home/Configuracion", "Configuración"))

来自我的_Layout.cshtml

但在此之前,我正在调用函数

 <script type="text/javascript">ObtenerDatosSesion();</script>

通过Ajax调用Controler方法

...
$.ajax({
        url: "../Home/ObtenerDatosSesion",
....

问题:为什么HtmlHelper会在ObtenerDatosSesion();之前被调用,即使我之前已将它放在_Layout.cshtml上?

我也尝试过调用窗口加载:

<body class="Fondoblue" onload="ObtenerDatosSesion();">

等方法。

我注意到在每次调试之后每次调用Helper都会被调用。我无法弄清楚为什么会发生这种情况。

我想知道它是否与Web.config行有任何关系,必须使用html助手

<add namespace="XSiteManagerWeb.Helpers"/>

所以为了说清楚,我只想让我的"ObtenerDatosSesion();方法在我的html助手之前被调用!

1 个答案:

答案 0 :(得分:4)

剃刀助手在服务器端执行,因此在任何JS在页面上呈现/执行之前,它们将被执行

我建议将../Home/ObtenerDatosSesion端点中的任何逻辑移动到与../Home/Configuracion相同的端点。如果它不止一次被调用,你可以把它放在自己的方法中。