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

如何通过Ajax调用控制器的GeneratePdfUrl方法?排查现有代码问题

问题分析与修正方案

核心错误点

  • 控制器方法无法被外部访问:你定义的GeneratePdfUrl是private static方法,ASP.NET的控制器Action必须是public实例方法(静态方法无法被控制器激活机制调用,私有方法更无法通过路由访问)。
  • 缺少HTTP请求特性标记:需要给方法添加[HttpGet]特性,明确告诉路由这是处理GET请求的Action,否则框架无法识别该方法作为请求入口。
  • Ajax未处理响应结果:你的JS代码只发送了请求,但没有接收服务器返回的字符串,必须通过回调逻辑获取并处理返回值。

修正后的代码示例

控制器代码(C#)

public class PdfViewerController : Controller
{
    [HttpGet] // 标记为处理GET请求的Action
    public string GeneratePdfUrl(string test)
    {
        string aUrl;
        // 你的业务逻辑代码
        return aUrl;
    }
}

JS代码

function _doUrl() {
    $.ajax({
        type: "GET",
        url: ep.utilities.replaceEPCommand('PdfViewer/GeneratePdfUrl'),
        data: { "test": "R"}
    })
    .done(function(response) {
        // 这里处理返回的字符串response
        console.log("获取到的PDF URL:", response);
        // 可根据需求将结果用于后续逻辑,比如赋值给页面元素
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
        // 可选:处理请求失败的情况
        console.error("请求失败:", textStatus, errorThrown);
    });
}

关于.done()的必要性

是的,必须使用.done()(或jQuery Ajax的success回调,但success已被官方标记为过时,推荐使用.done())来处理服务器返回的结果。因为Ajax是异步请求,发送请求后代码会继续执行,只有通过回调函数才能在服务器响应到达时获取返回的字符串。

内容的提问来源于stack exchange,提问作者Сергей Кащишин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:35:16