我在asp.net-mvc中使用Nancy框架。在各种视图中,我希望能够通过ajax / getJSON从公共模块调用方法,而不是必须在每个控制器模块中复制端点,但到目前为止还没有成功。
假设我的控制器模块如下所示:
namespace SomeNamespace
{
using Microsoft.EntityFrameworkCore;
using Models;
using Nancy;
public class CommonModule : NancyModule
{
public CommonModule(IAppRepository repo)
{
Get("/EndpointName/{someargument}", async (x, ct) =>
{
string result = string.Empty;
int someargument;
if(int.TryParse(x.apptype, out someargument))
{
var data = await repo.SomeModel.AsNoTracking().ToListAsync().ConfigureAwait(false);
result = Response.AsJson(data);
}
return result;
});
}
}
}
在我的js文件中,我有类似的内容:
function callMethod()
{
var someargument = $('#SomeControl').data('somedata');
var url = window.location.protocol + '/' + window.location.host + '/CommonModule/EndpointName/' + someargument;
$.getJSON(url, function (json) {
//process if/as required;
})
.done(function (info) {
//process if/as required;
})
.fail(function (jqxhr, textStatus, error) {
//process if/as required;
});
}
这可能吗?如果是这样,这是怎么做到的?我只是错误地构建了网址,还是确保.cshtml文件中存在正确的引用?
答案 0 :(得分:1)
尝试类似:
$('#CommonModulebtn').click(function () {
$.ajax({
url: '/CommonModule/CommonModule',
type: "GET",
dataType: "JSON",
data: { IAppRepository : $('#SomeControl').data('somedata').val() },
success: function (info) {}
答案 1 :(得分:1)
function callMethod() {
$.ajax({
url: "/CommonModule/CommonModule",
type: "GET",
data: $("#IDFORM").serialize(),
dataType: "json",
success: function (data, textStatus, jqXHR) {
alert("ok");
},
error: function (data) {
alert("error");
}
})
}
答案 2 :(得分:1)
您可以从应用程序中的任何控制器视图调用任何控制器操作。你的代码很好。您需要确保构建正确的URL。
我不熟悉NancyFx路由,但我认为你需要从URL中删除'CommonModule',它看起来像:
var url = window.location.protocol + '/' + window.location.host + '/EndpointName/' + someargument;
如果是常用模块,您可能需要更改服务器上的路由:
public CommonModule(IAppRepository repo)
{
Get("/common/EndpointName/{someargument}", async (x, ct) => ...
,JavaScript中的网址为
var url = window.location.protocol + '/' + window.location.host + '/common/EndpointName/' + someargument;