You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.cshtml页面中将JavaScript函数返回值赋值给Razor变量

核心原因

你没法直接在Razor代码块中调用前端JS函数给C#变量赋值,两者的执行环境、执行时机完全隔离:

  • Razor代码运行在服务端:用户发起页面请求时,服务器会先运行所有@{}包裹的C#代码,把渲染生成的静态HTML、JS文本拼接成完整的HTTP响应发回用户浏览器,这个阶段JS代码只是待发送的普通文本,根本不会被执行。
  • 你写的getview()是客户端脚本:要等服务器把整个页面内容传输到用户设备、浏览器完成页面解析后才会运行,这时候服务端的Razor代码早就执行结束、相关资源已经释放了。
可行实现方案

根据你的业务逻辑选择对应方式即可:

方案1:计算逻辑不依赖客户端信息,直接迁移到Razor实现

如果getview()的计算逻辑不需要读取浏览器端独有的数据(比如用户输入内容、DOM节点值、本地存储、浏览器窗口属性这类只有页面加载到用户设备后才能拿到的信息),完全没必要写JS函数,直接在Razor块里用C#实现相同逻辑,是最简单高效的方案:

<h2>Calculation and approval of bonuses</h2>
@{
    // 在服务端用C#实现对应计算逻辑
    int GetView()
    {
        int d = 2;
        return d;
    }
    int i = GetView();
}

方案2:计算必须依赖客户端结果,通过异步请求传值

如果getview()的逻辑必须依赖客户端环境才能拿到结果(比如要取用户实时输入的表单值、本地缓存的状态标识等),不可能在页面首次渲染阶段就把值赋给Razor变量。正确的处理流程是:

  1. 首次渲染页面时给Razor变量i赋默认初始值,正常输出页面内容
  2. 等页面在浏览器加载完成后,执行getview()拿到计算结果
  3. 通过AJAX/Fetch把结果提交到服务端对应的接口,服务端拿到值后完成后续业务处理,再把更新后的内容返回给前端渲染

简单实现示例:

<h2>Calculation and approval of bonuses</h2>
<div id="resultWrap"></div>
<script>
    function getview() {
        var d = 2
        return d;
    }
    // 页面加载完成后执行逻辑
    window.addEventListener('load', function(){
        const calcResult = getview();
        // 把计算结果提交到服务端接口
        fetch(`/YourController/ProcessValue?val=${calcResult}`)
            .then(res => res.text())
            .then(serverRes => {
                // 把服务端返回的处理结果渲染到页面
                document.getElementById('resultWrap').innerHTML = serverRes;
            })
    })
</script>

不要试图在同一次页面渲染流程里跨服务端、客户端边界直接传值,这是Web开发的基础运行规则。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:54:18