在RedirectToAction上调用javascript

时间:2017-03-24 14:55:19

标签: javascript c# asp.net-mvc

当用户成功重定向到新视图时,是否可以调用javascript函数?

我尝试了以下内容 -

C#

if (Session["UserId"])
{
      return RedirectToAction("LoggedIn");
}

CSHTML

@if (Session["UserId"] != null)
{
    <script>$('#btnTest').click();</script>

}

失败
 JavaScript runtime error: '$' is undefined

我在项目中引用了jquery,只需点击一下按钮即可对其进行测试,但是上面的操作失败了。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

最有可能的是,在实际引用jQuery之前插入了这个HTML。例如,如果你没有引用jQuery直到结束体标记(如你所愿),那么这将在jQuery实际存在之前运行。处理此类事情的最佳方法是使用部分。您可以在布局中为脚本定义一个部分,然后确保该部分低于jQuery等所需的依赖项。

<强> _Layout.cshtml

    <script src="/path/to/jquery.js"></script>
    @RenderSection("Scripts", required: false)
</body>

<强> AwesomeView.cshtml

@section Scripts
{
    @if (Session["UserId"] != null)
    {
        <script>$('#btnTest').click();</script>
    }
}

这将导致生成以下HTML(假设会话变量当然不为空:

    <script src="/path/to/jquery.js"></script>
    <script>$('#btnTest').click();</script>
</body>

重要的是要注意,这仅适用于标准视图。部分视图无法定义部分,因此如果您需要在部分内部包含一些脚本,则必须采用不同的方法来延迟执行。通常,此时最好的方法是直接使用window.onload

var onload = window.onload
window.onload = function () {
    onload();
    // your code here
}

这应该确保已经加载了jQuery。但是,首先不要在部分中包含JS代码真的更好。这可能会导致许多问题,并且通常会使您的代码非常分散和脆弱。