从我的 MVC 应用程序获取会话值到我的 Javascript 中

Get a Session value from my MVC app into my Javascript

本文关键字:我的 Javascript 获取 MVC 应用程序 会话      更新时间:2023-09-26
这不是

标准,所以请在标记重复之前阅读。

在我们的 MVC 应用程序中 在我们的_Layout.cshtml顶部,我们像这样加载脚本:

@Scripts.RenderFormat("<script src='{0}' defer></script>", "~/bundles/scripts")

_Layout.cshtml的底部,我们有这个:

@RenderSection("scripts", required: false)

出于我无法控制的原因,我们必须推迟。 :(

此捆绑包包含 jquery 文件。另一个文件叫做 Script.js ,它在 jQuery 之后加载,并有一个名为 setCollapse(collapse) 的函数。

它看起来像这样:

function setCollapse(collapse) {
    debugger;
    alert(collapse);
    if (collapse == 'False') {
        $('.collapse').collapse("show");
    } else {
        $('.collapse').collapse();
    }
}

我想在我的 MVC 视图加载上将该 javascript 函数一起使用会话值,如下所示:

@section scripts
{
    <script>
        $(document).ready(function() {
            debugger;
            var collapse = '@Session["Collapse"].ToString()';
            setCollapse(collapse);
        });
    </script>
}

但我继续得到:

未捕获的引用错误: $ 未定义

如何让页面加载时将会话值传递到我的 javascript/jQuery 中?

这是我是如何解决的。当然,这比我想象的要简单。

在我们_Layout.cshtml顶部的MVC应用程序中,我这样做:

<script>
    var collapse = '@Session["Collapse"].ToString()';
</script>
@Scripts.RenderFormat("<script src='{0}' defer></script>", "~/bundles/scripts")

RenderFormat加载jQuery和我的script.js文件。

然后在我的脚本中.js我这样做:

$(document).ready(function () {
    //....
    // Global collapse value
    if (collapse == 'False') {
        $('.collapse').collapse("show");
    } else {
        $('.collapse').collapse("hide");
    }
});

你需要添加

 @RenderSection("scripts", required: false)

在布局文件中的结束正文标记之前。只要你的jquery在此之前被加载,它应该就可以工作。

编辑

在标题中添加此内容

<script type="text/javascript">
    window.$ = (function () {
        var q = [], f = function (cb) {
            q.push(cb);
        };
        f.attachReady = function ($) {
            $(function () {
                $.each(q, function (i, f) {
                    f();
                });
                q.length = 0; // clear it, just in case
            });
            return $;
        }
        return f;
    })();
</script>

然后下面在正文标签结束之前

<script type="text/javascript">
    $.noConflict();
    $ = $.attachReady(jQuery);
</script>

这将延迟所有 jquery 依赖代码,并在加载 jquery 后运行它们。

编辑 2

<script type="text/javascript">
    $.noConflict();
    $ = $.attachReady(jQuery);
</script>

这应该是正文标签结束前的最后一件事。