如何通过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,提问作者Сергей Кащишин
相关产品推荐
相关产品推荐

