首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC控制器方法通过不工作在服务器上的getJson调用

ASP.NET MVC控制器方法通过不工作在服务器上的getJson调用
EN

Stack Overflow用户
提问于 2022-06-22 18:34:30
回答 1查看 139关注 0票数 0

强制性的“这在我的开发环境中工作,但不工作在服务器上。”

我有一个使用ASP.NET 5 MVC项目(使用.NET Core ),在这个项目中,在某个视图上采取的操作会在我的javascript代码中触发一个"getJson“调用,这个调用反过来会调用控制器上的一个函数来从服务器获取数据,以便在没有回发的情况下更新页面。

在文本框中输入有效条目时,此函数将在我的javascript中调用:

代码语言:javascript
复制
function getCustomerOptions(cn) {
    $.getJSON('/Home/GetBillingCustomerByCustNum', { cust: cn }, function (data) {
        // handle returned json data
    }
}

..。它在我的家庭控制器中调用函数GetBillingCustomerByCustNum:

代码语言:javascript
复制
public async Task<JsonResult> GetBillingCustomerByCustNum(string cust)
{
    var data = //[retrieve data from server thru repository function]

    return Json(data);
}

在我的开发环境中,这是很好的工作。但是,在我将应用程序发布到Windows Server 2016计算机上的IIS环境后,这将失败。看起来IIS试图调用'/Home/GetBillingCustomerByCustNum‘,就好像它是一个视图或一个物理对象,因此返回一个404错误。

我尝试修改我的getJson控制器调用jquery函数"getCustomerOptions“

代码语言:javascript
复制
<%= Url.Content("~/") %>

这样呼叫就变成

代码语言:javascript
复制
$.getJSON('<%= Url.Content("~/") %>/Home/GetBillingCustomerByCustNum', { cust: cn }, function (data) { ...

但这还是失败了。根据调试器控制台,上面的url被翻译为

代码语言:javascript
复制
http://localhost/HC_RFQ/Home/%3C%=%20Url.Content(%22~/%22)%20%%3E/Home/GetBillingCustomerByCustNum?cust=[given value]

我唯一能找到的其他步骤是使用HTML助手准备我的url,如下所示:

代码语言:javascript
复制
var url = '@Url.Content("~/Home/GetBillingCustomerByCustNum/")'

$.getJSON(url, { cust: cn }, function (data) {...

但是,这当然失败了,因为HTML助手不能在单独的javascript文件中工作。Var url按字面写的方式传入。

最后,我知道这不是我的javascript文件没有正确链接的情况,因为在这个失败的调用之前,我可以在调试器中断点我的javascript,并且在运行时命中断点。

我还能做什么来解决这个问题?如有任何建议,敬请见谅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-23 13:59:39

您是否尝试过简单的Home/GetBillingCustomerByCustNum,而不需要启动/?从您如何描述生产中的错误来看,这基本上是一个服务器问题,当组成到控制器的最终路由时。

删除Home/部件是因为您从驻留在同一控制器文件夹路径上的视图调用该操作。由于您使用的是.NET核心,我建议使用asp-actionasp-controller标记帮助器,因为它们可以让服务器决定到所需方法的实际路由是什么,即使没有实际回发,也可以使用POSTing或GETing。例如,我使用javascript在表单上调用我的方法就是这样做的:

代码语言:javascript
复制
<form asp-controller="myController" asp-action="myAction">

这就是我如何获得js代码来检索相应的url的方法。

代码语言:javascript
复制
let form = $(this).parents('form')[0];
let url = form.getAttribute('action');

表单没有实际的submit按钮,因此调用都是从javascript发出的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72720460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档