Search code examples
javascriptasp.net-mvcasp.net-mvc-4asp.net-optimization

Execute javascript from bundles in Document.ready


I use the MVC4 default template.

I add a script : MyScript.js in /Scripts/MyApp/ with a function :

function Testing()
{
    alert('test');
}

In the global.asax :

 bundles.Add(new ScriptBundle("~/bundles/myapp").Include(
    "~/Scripts/MyApp/MyScript.js"));

I'd like call this method in /Views/Home/Index.cshml

I tried the code below but without success:

<script type="text/javascript" lang="javascript">
    $(document).ready(function () {
        Testing();
    });
</script>    

@Scripts.Render("~/bundles/myapp")

When I look the source code the link to MyScript.js is there and I can navigate to it (go to the source)

But the Testing() method in the $(document).ready is not executed.

Update1

<script type="text/javascript" lang="javascript">

    $(document).ready(function () {
        alert("test");
    });
</script>

Solution

  • Try putting you inline script after the bundle inclusion. Also the lang attribute on the script tag is deprecated:

    @Scripts.Render("~/bundles/myapp")
    
    <script type="text/javascript">
        $(document).ready(function () {
            Testing();
        });
    </script>    
    

    UPDATE:

    OK, I think you forgot to include jquery, so the $ function not defined :-)

    So if you want to do it with bundles:

    bundles.Add(new ScriptBundle("~/bundles/myapp").Include(
        "~/Scripts/jquery-{version}.js", "~/Scripts/MyApp/MyScript.js")
    );
    

    or if you don't want to use bundles:

    <script type="text/javascript" src="~/scripts/jquery-1.7.1.js"></script>
    <script type="text/javascript" src="~/scripts/MyScript.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            Testing();
        });
    </script>