'Why razor executes a C# method inside a button click method on compilation without clicking the button?

-ASP.NET 4.7 Web Application-

I hold some notifications in the session to show the user. I want to remove the session variable on button click.

The idea is to make sure the user gets notified so as long as the user don't hit "Got it" button, I won't be removing the notifications from the session so that every time the users reload the page they will see the same notification window.

I have a button in a modal as follows:

<button type="button" class="btn btn-secondary" onclick="clearSession()" data-dismiss="modal">Got it</button>

And this is the method supposed to be called on button click:

<script type="text/javascript">
    function clearSession() {
        @{Session.Remove("WhatsNewList");}
    };
</script>

The problem is that the following part of the code precompiles and executes even though the button is not clicked.

@{Session.Remove("Notifications");}

I want to know what is the reason for this and is there a way to prevent this.

I know I can call a C# method using Ajax or jQuery but I want to know if there is a way I can do it this way as well.

Thanks in advance!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source