为什么 razor 在不单击按钮的情况下在编译时在按钮单击方法中执行 C# 方法?

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

-ASP.NET 4.7 网络应用-

我在会话中保留一些通知以显示给用户。我想在单击按钮时删除会话变量。

我的想法是确保用户收到通知,只要用户不点击“知道”按钮,我就不会从会话中删除通知,这样每个当用户重新加载页面时,他们将看到相同的通知 window.

我在模态中有一个按钮如下:

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

这是应该在单击按钮时调用的方法:

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

问题在于即使未单击按钮,以下代码部分也会预编译并执行。

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

我想知道这是什么原因,有什么办法可以避免。

我知道我可以使用 Ajax 或 jQuery 调用 C# 方法,但我想知道我是否也可以这样做。

提前致谢!

环绕表达式 使用@{ } 将导致在页面加载到浏览器之前在服务器端计算表达式,这意味着代码将在页面被请求时立即执行。所以,简短的回答是,你不能用这种方法做你想做的事。