Search code examples
javascriptjquerytelerikdom-events

Telerik MVC controls, OnDocumentReady is firing twice


I'm new to Telerik MVC controls, so this may be something simple.

I started out with making a new TelerikMvcApplication solution.

Site.Master:

    </div>
    <%: Html.Telerik().ScriptRegistrar().DefaultGroup(group =>
          group.Combined(true).Compress(true).Add("Index.js")) %>
</body>
</html>

Index.aspx:

    <%: Html.Telerik().ScriptRegistrar().OnDocumentReady("Index.Init()") %>
</asp:Content>

Index.js:

var Index = function () {
    return {
        Init: function () {
            alert('1');
        }
    };
} ();

When I load Index.aspx, the Init() function in Index.js is fired twice, so I see 2 alerts one after another. If I assign a click handler to a button inside the Init() function and hit the button with FireBug, it is actually showing 2 events being assigned to the button. Why is this happening?

Edit

After some more firebugging, I figured out that both calls to ScriptRegistrar are being rendered. How do I make only master one to render?


Solution

  • To answer my own question, the problem was in the use of

    <%:  %>
    

    with colon.

    To fix it, I removed colon character from both Master and View, and called Render() in Master.

    Master:

    <% Html.Telerik().ScriptRegistrar().DefaultGroup(group =>
       group.Combined(true).Compress(true).Add("json2.js")).Render(); %>
    

    View:

    <% Html.Telerik().ScriptRegistrar().Scripts(scripts =>
       scripts.AddGroup("IndexGroup", group =>
       group.Add("~/Scripts/Index.js"))).OnDocumentReady("Index.Init()");  %>