【问题标题】:Why razor executes a C# method inside a button click method on compilation without clicking the button?为什么razor在编译时在按钮单击方法中执行C#方法而不单击按钮?
【发布时间】:2022-02-03 17:33:52
【问题描述】:

-ASP.NET 4.7 Web 应用程序-

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

这个想法是为了确保用户得到通知,只要用户不点击“知道”按钮,我就不会从会话中删除通知,以便每次用户重新加载他们将看到相同的通知窗口的页面。

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

<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# 方法,但我想知道是否有办法也可以这样做。

提前致谢!

【问题讨论】:

    标签: javascript c# asp.net session razor


    【解决方案1】:

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

    【讨论】:

    • 还要添加这个,javascript函数将在客户端机器(在浏览器中)执行,因此没有办法直接从客户端对后端产生这种类型的副作用而不发送某种请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多