【发布时间】:2015-01-20 17:25:07
【问题描述】:
我正在尝试从 webforms 项目中的 Javascript 文件调用 MVC 控制器,但无论我提供什么 url,都找不到 Controller 方法。
如果有人能帮我正确设置网址,将不胜感激。
代码如下: 我修改了 RouteConfig 文件以包含控制器所在的命名空间:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "WarrantyUI.Controllers" }
);
}
这是我尝试调用控制器的 JS 文件,其中包含所有变体(请参阅“url”属性)——它们都不起作用。
function getJournalVoucherData(parms)
{
//var url = '<%= Url.Action("GetJournalVoucherDataAsync","JournalVoucher") %>';
//var url = '<%=Page.ResolveUrl("/WarrantyUI/Controllers/JournalVoucher/GetJournalVoucherDataAsync)%>';
//var serviceBase = '/JournalVoucher/'
// url: serviceBase + 'GetJournalVoucherDataAsync',
$.ajax({
//url: url,
//url: '@Url.Action("GetJournalVoucherDataAsync", "JournalVoucher")',
url: "/WarrantyUI/Controllers/JournalVoucher/GetJournalVoucherDataAsync",
//url: Url.Content("GetJournalVoucherDataAsync", "JournalVoucher"),
//url: Url.Content("/WarrantyUI/Controllers/JournalVoucher/GetJournalVoucherDataAsync"),
//url: "/Controllers/JournalVoucher/GetJournalVoucherDataAsync",
//url: "/JournalVoucher",
//url: "/WarrantyUI/Controllers/JournalVoucherController/GetJournalVoucherDataAsync",
//url: "/WarrantyUI/Controllers/JournalVoucher/GetJournalVoucherDataAsync",
data: JSON.stringify(parms),
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
async: true,
success: function (data, textStatus)
{
if (textStatus == "success" && data && data.kvs && data.kvs.length > 0)
{
$("#JournalVoucherGrid-table").children().show();
$("#JournalVoucherGrid-table")[0].addJSONData(data);
$("#JournalVoucherGrid-table > span.grdMsg").hide(); $(".divLoadMsg").hide();
}
else
{
$("#JournalVoucherGrid-table > :not(.grdMsg)").hide(); $("span.grdMsg", $("#JournalVoucherGrid-table")).html('...').show(); $(".divLoadMsg").hide();
}
},
error: function (data, textStatus, sss)
{
alert(cnxError + '\n' + sss); $(".divLoadMsg").hide();
}
});
};
这是控制器文件:
namespace WarrantyUI.Controllers
{
public class JournalVoucherController : Controller
{
//TODO: Add await keyword when making DB call to retrieve actual data from GetJournalVoucherDataAsync method
/// <summary>
///
/// </summary>
/// <returns>JsonResult - Grid data</returns>
[HttpPost]
public JsonResult GetJournalVoucherDataAsync()
{
最后,附图显示了此 Contoller 方法所在的确切路径,但未找到:
编辑
请注意,这在本地可以正常工作,但是一旦部署到 Web 服务器,即使您查看图像,也无法解析控制器路径,路径正是它应该在的位置并且文件物理存在。
我是否需要在 Web 服务器上对 IIS 执行任何操作来解析路径。
任何其他有关如何解决此问题的信息将不胜感激......
【问题讨论】:
-
试试
/JournalVoucher/GetJournalVoucherDataAsync -
附带说明,最好不要以
Get开头的[POST]方法。这非常具有误导性
标签: javascript c# asp.net asp.net-mvc