Dimskiy
Dimskiy

Reputation: 5301

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?

Upvotes: 2

Views: 966

Answers (2)

Skorunka František
Skorunka František

Reputation: 5430

For MVC Razor ViewEngine:

@{
    Html.Telerik().ScriptRegistrar().OnDocumentReady(
    @<text>
        alert('onLoaded');
    </text>);
}

Upvotes: 0

Dimskiy
Dimskiy

Reputation: 5301

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()");  %>

Upvotes: 2

Related Questions