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

ASP.NET非Razor环境下C#调用JS函数并获取返回值的方法

如何在ASP.NET WebForms中获取JavaScript函数的返回值

首先明确核心逻辑:服务器端C#代码与客户端JS代码是先后执行的——C#先在服务器生成页面内容(包括JS)发送到浏览器,浏览器才会执行JS。因此无法直接同步获取JS函数的返回值,必须通过**回传(PostBack)**的方式将JS的值传递给服务器端。

以下针对你的两种场景给出具体实现方案:


场景1:获取已有JS函数(如$.retorno())的返回值

步骤1:添加服务器端隐藏域

在ASPX页面中添加一个HiddenField控件,用于存储JS函数的返回值:

<asp:HiddenField ID="hfJsReturnValue" runat="server" />

步骤2:注册JS代码存入值并触发回传

在C#后台代码中,注册JS代码将$.retorno()的结果写入隐藏域,然后触发页面回传:

// 拼接JS代码:获取返回值→存入隐藏域→触发回传
string jsScript = $@"
var retornoValor = $.retorno();
document.getElementById('{hfJsReturnValue.ClientID}').value = retornoValor;
__doPostBack('{hfJsReturnValue.UniqueID}', '');";

// 注册并执行这段JS
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "GetJsRetorno", jsScript, true);

步骤3:服务器端读取返回值

在Page_Load事件中,判断是否为回传请求,读取隐藏域的值:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string jsRetorno = hfJsReturnValue.Value;
        // 根据返回值执行后续逻辑
        if (jsRetorno == "Não")
        {
            // 执行取消操作
        }
        else if (jsRetorno == "Sim")
        {
            // 执行确认操作
        }
    }
}

场景2:获取用户交互(如Bootstrap模态框选择)后的返回值

针对你代码中的模态框确认场景,修改按钮逻辑,将用户选择存入隐藏域后触发回传:

步骤1:添加确认结果的隐藏域

<asp:HiddenField ID="hfConfirmacao" runat="server" />

步骤2:修改模态框JS代码

调整按钮的点击事件,将用户选择的值写入隐藏域并触发回传:

StringBuilder mensagem = new StringBuilder();
mensagem.Append("BootstrapDialog.show({closable: false,");
mensagem.Append("type: BootstrapDialog.TYPE_WARNING,");
mensagem.Append("title: 'Material',");
mensagem.Append("message: 'Existem ordens separadas para este material.<br><br>Deseja prosseguir com a gravação?',");

// 确认按钮(Sim):存入值并回传
mensagem.Append("buttons: [{id: 'btnConfirarGravacao',");
mensagem.Append("icon: 'glyphicon glyphicon-ok-sign',");
mensagem.Append("label: 'Sim',");
mensagem.Append("action: function (dialog) {");
mensagem.Append("dialog.close();");
mensagem.Append($"document.getElementById('{hfConfirmacao.ClientID}').value = 'Sim';");
mensagem.Append($"__doPostBack('{hfConfirmacao.UniqueID}', '');");
mensagem.Append("}},");

// 取消按钮(Não):存入值并回传
mensagem.Append("{id: 'btnCancelarGravacao',");
mensagem.Append("icon: 'glyphicon glyphicon-ban-circle',");
mensagem.Append("label: 'Não',");
mensagem.Append("action: function (dialog) {");
mensagem.Append("dialog.close();");
mensagem.Append($"document.getElementById('{hfConfirmacao.ClientID}').value = 'Não';");
mensagem.Append($"__doPostBack('{hfConfirmacao.UniqueID}', '');");
mensagem.Append("}}]});");

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "mensagemModalSimples", mensagem.ToString(), true);

步骤3:服务器端处理用户选择

在Page_Load中读取隐藏域的值,执行对应逻辑:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string confirmacao = hfConfirmacao.Value;
        if (!string.IsNullOrEmpty(confirmacao))
        {
            if (confirmacao == "Sim")
            {
                // 执行ContinuaGravacao对应的服务器端逻辑
            }
            else if (confirmacao == "Não")
            {
                // 执行取消操作的逻辑
            }
        }
    }
}

注意事项

  • 确保__doPostBack函数存在:WebForms页面默认会生成该函数,若未生成,可通过添加<asp:ScriptManager runat="server" />控件确保其被注册。
  • 隐藏域的ClientID:WebForms会根据命名容器生成带前缀的客户端ID,必须用ClientID获取浏览器端的实际ID,避免找不到元素。
  • 回传触发:__doPostBack可指定回传的目标控件,也可直接触发整页回传,根据需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:45:33