我一直在研究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助手之前被调用!
答案 0 :(得分:4)
剃刀助手在服务器端执行,因此在任何JS在页面上呈现/执行之前,它们将被执行。
我建议将../Home/ObtenerDatosSesion
端点中的任何逻辑移动到与../Home/Configuracion
相同的端点。如果它不止一次被调用,你可以把它放在自己的方法中。