【发布时间】:2022-03-07 11:18:09
【问题描述】:
我目前正在使用以下代码对我的控制器执行 ajax 调用:
$.ajax({
type: "POST",
url: "@Url.Action("uploadImage", "Item")",
data: '{ "imageData" : "' + image + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (success) {
alert('Success ' + success.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
这是控制器:
[HttpPost]
public ActionResult uploadImage(string imageData)
{
string imageName = Guid.NewGuid().ToString();
try
{
ProductManager pm = new ProductManager();
pm.AddNewProduct(imageName);
}catch(Exception e)
{
writeToLog(e);
}
return Json(new { success = imageName }, JsonRequestBehavior.AllowGet);
}
它到达控制器并且 AddNewProduct 函数成功运行。问题是我希望它返回在控制器中创建的图像名称。这也可以,但它也会返回我完整的 html 页面。 我在成功和发生错误时发出警报,但不知何故,它总是以以下警报结束:
它显示了我需要的值,但为什么它也会返回我的完整 HTML?
【问题讨论】:
-
老实说,鉴于您显示的代码,我看不出这怎么可能。
-
@Alexandru-IonutMihai 是的,和我的代码完全一样,直接复制粘贴。
-
您的 ajax 调用是在某个 Razor 视图页面中还是在某个外部 js 文件中?如果它在某个外部 js 文件中,那么您可以按照此答案中给出的方法,而不是提供如下的 api URL
'url: "@Url.Action("uploadImage", "Item")'检查此方法 stackoverflow.com/questions/34360537/… -
mvc 管道中的某个地方正在将附加文本添加到响应的正文中,您需要弄清楚它在哪里。如果它不在您显示的方法代码中,那么另一个选项将在事件处理程序中(通常在 global.asax.cs 中找到)或在自定义操作过滤器中(查看是否有任何全局注册或顶部装饰类或方法)。
-
当然,DNN 的管道中可能存在一个或多个挂钩,它们会在您的响应周围添加模板代码。至于如何绕过该管道,我不确定,您必须通读 DNN 文档上的操作方法。您应该首先了解如何将 DNN 连接到您的 MVC 应用程序(或反之亦然)。如果你想创建一堆 REST 方法,最好的做法是使用 Web API 而不是 MVC,因为 DNN 可能不会假设你想从 Web API 调用返回 HTML。通过在这个旁边添加一个 Web API 控制器并复制/粘贴方法主体来尝试它
标签: javascript c# jquery html ajax