TheChampp
TheChampp

Reputation: 1437

For Loop With C# Code Behind Method

When I debug in code behind It let me to go inside "Test" method only one time, not three times, why ? I see that I have javascript "for loop" which should go three times inside C# "Test" method. But it goes only one time, is this normal ? I want to go through "Test" method three times as I said in javascript "for loop". Where is the problem ?

aspx code:

<script>
    $(function () {
        for (var i = 0; i < 3; i++) {

            console.log("active");
            var a = '<%= this.Test() %>';
        }
    });
</script>

C# code behind:

    public string Test()
    {
        int a = 1;
        return "active";
    }

Upvotes: 0

Views: 817

Answers (3)

King Friday
King Friday

Reputation: 26076

The code only executes once in all cases. The for loop on the JavaScript will not execute the c# 3 times. Instead, the page is output only once as the <%= this.Test() %> is an output block that is interpreted a single time on the server. Your script clientside is then interpreted.

Upvotes: 1

Khan
Khan

Reputation: 18142

this.Test() is not being called in your for loop in javascript. It is being called server-side to evaluate it.

Look at it this way. Your javascript really says the following after rendering:

<script>
    $(function () {
        for (var i = 0; i < 3; i++) {

            console.log("active");
            var a = 'active';
        }
    });
</script>

The reason for this is in the way ASP.NET works. It takes your xhtml and server-side code and renders html to spit back to the client. The client then has a chance to execute any of its code. Javascript is executed client-side.

Upvotes: 8

asawyer
asawyer

Reputation: 17808

You are writing the result of the Test function as a string into the javascript, which will then execute once the browser loads the page.

If you want to run Test 3 times from the page itself, you'll want to look into one of the various Ajax libraries.

Upvotes: 4

Related Questions