我们正在通过API调用我们的服务器端逻辑。我无法从我的AJAX调用中获取动作。任何人都可以告诉我我的代码有什么问题以及为什么我收到错误,说它无法在控制器中找到该操作?
控制器操作
[System.Web.Http.HttpPost]
public HttpResponseMessage assignViews(string selectedViews, string volIds)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
AJAX请求
self.saveViews = function () {
var data = {
selectedViews: self.selectedViews().toString(),
volIds: populateSelectedVolIds().toString()
};
var jsonData = ko.toJSON(data);
$.ajax({
url: "../../ja/ClientView/assignViews",
type: "POST",
contentType: "application/json; charset=utf-8",
cache: false,
data: jsonData,
success: handleViewsForClientSuccess,
error: handleEditViewsErrors
});
};
路由
public override void RegisterArea(AreaRegistrationContext context)
{
RouteTable.Routes.MapHttpRoute(
"ja",
"ja/{controller}/{id}",
new { action = "Index", id = UrlParameter.Optional, version = UrlParameter.Optional }
);
}
答案 0 :(得分:0)
在路线注册中,您错过了添加动作占位符,而您已将其标记为"索引"默认情况下,这意味着您的ajax调用将尝试与ActionMethod匹配"索引"代替。尝试将其更改为
ja/{controller}/{action}/{id}
另一个原因可能是参数不匹配。
答案 1 :(得分:0)
[1]从网址中删除操作名称
请勿在您的网址中包含操作名称,因为它不属于您的路由。 HTTP动词POST将找到您的操作,因为您使用此VERB标记了您的操作,并且您的ajax请求是POST请求。你的网址应该是:
public class MyModel
{
public string selectedViews { get; set; }
public string volIds { get; set; }
}
[2]将模型用作参数
最佳做法是使用模型而不是字符串作为操作的参数。例如,您可以在代码中创建此模型:
[System.Web.Http.HttpPost]
public HttpResponseMessage assignViews(MyModel data)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
并改变你的行动:
{{1}}